Не удается выполнить запись в таблицу Snowflake, но без возврата ошибок

#python #pandas #snowflake-cloud-data-platform

Вопрос:

Код успешно выполняется без возврата ошибок, но отображаются только старые записи:

 import pandas as pd
from sqlalchemy import create_engine
from snowflake.sqlalchemy import URL
from config import config

engine = create_engine(URL(account=config.account, 
          user=config.username, 
          password=config.password, 
          warehouse=config.warehouse, 
          database=config.database, 
          schema=config.schema,))
    
conn = engine.connect()
    
df = pd.DataFrame([('AAA', '1234'), ('BBB', '5678')], columns=['name', 'pswd'])
df.to_sql('demo_db.public.test_f1', con=engine, index=False, if_exists='append', index_label=None)
        
df = pd.read_sql_query('select * from demo_db.public.test_f1', conn)
print(df.head(5))
    
conn.close()
engine.dispose()
 

Пожалуйста, помогите!

Комментарии:

1. Можете ли вы поделиться тем, что показывает история запросов Snowflake для этих операторов?

2. Я не понял вашу точку зрения здесь. Я использовал print(df.head(5)), чтобы отобразить первые 5 строк в таблице, также я перешел в snowflake и просмотрел данные таблицы, новые записи вообще не добавлялись.

3. @FrankDuan Возможно, имя было автоматически заключено в кавычки, и таблица доступна как: SELECT * FROM demo_db.public."demo_db.public.test_f1" ;

4. выстрел в темноте здесь.. нужно ли указывать роль snowflake при создании движка? я знаю, что концепция роли сильно отталкивает людей в snowflake.

5. @Lukasz Szozda Вы правы! Я изменил его на: df.to_sql(‘test_f1′, con = engine, index = False, if_exists =’append’, index_label = None), И это работает! Большое спасибо!

Ответ №1:

Кажется, что имя из 3 частей обрабатывалось как единый идентификатор, и данные были вставлены в таблицу с именем "demo_db.public.test_f1" :

 SELECT * FROM demo_db.public."demo_db.public.test_f1";
 

Имя может быть указано только как имя таблицы, а база данных / схема выводятся из соединения:

 df.to_sql('test_f1', con=engine, index=False, if_exists='append', index_label=None)