#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)