Python 和 Snowflake 使用 SQL Alchemy 引擎将新数据附加到现有表中返回当前 session 没有当前数据库

标签 python sqlalchemy snowflake-cloud-data-platform pandas-to-sql

我需要将一些新数据附加到雪花上的现有表中。我正在使用 sqlalchemy作为引擎和 Pandas 数据框to_sql() .这是导入和脚本:

import pandas as pd
import os
import snowflake.connector as snowCtx
import getpass
import json
import numpy as np
from datetime import date, datetime
import time
from sqlalchemy import create_engine
from sqlalchemy.dialects import registry
import snowflake.sqlalchemy
from snowflake.connector.pandas_tools import pd_writer
from sqlalchemy.ext.declarative import declarative_base

registry.register('snowflake', 'snowflake.sqlalchemy', 'dialect')

columns_df = pd.DataFrame(data.columns.to_list(), columns={'survey_column_name'})
                        columns_df['survey_id'] = nextval
                        columns_df = columns_df[['survey_id', 'survey_column_name']]
                        columns_df.to_sql('SURVEY_METADATA_COLUMN_NAMES', 
                                         index = False,  
                                         index_label = None, 
                                         con = engine, 
                                         schema = 'PUBLIC', 
                                         if_exists = 'append', 
                                         chunksize = 300,
                                         method = pd_writer)
我得到的错误如下:

ProgrammingError: (snowflake.connector.errors.ProgrammingError) 090105 (22000): Cannot perform CREATE

TABLE. This session does not have a current database. Call 'USE DATABASE', or use a qualified name. [SQL:

CREATE TABLE "PUBLIC"."SURVEY_METADATA_COLUMN_NAMES" (

survey_id INTEGER,

survey_column_name TEXT )

]


连接如下:
user = input('Your Snowflake username: ')
password = getpass.getpass('Your Snowflake Password: ')
account = 'MY_ACCOUNT'
conn = snowCtx.connect(
    user=user,
    password=password,
    account=account,
    database='MY_DB',
    schema='PUBLIC',
    warehouse='COMPUTE_WH',
    role='SYSADMIN'
)

engine = create_engine(
    'snowflake://{user}:{password}@{account}/'.format(
        user=user,
        password=password,
        account=account,
        database='MY_DB',
        schema = 'PUBLIC',
        warehouse='COMPUTE_WH',
        role='SYSADMIN',
        cache_column_metadata=True
    )
)

最佳答案

我改用 write_pandas()反而:

success, nchunks, nrows, _ = write_pandas(conn, 
                                          columns_df, 
                                          'SURVEY_METADATA_COLUMN_NAMES', 
                                          chunk_size = 300, 
                                          schema = 'PUBLIC')
                        print(success, nchunks, nrows)
if(success):
   print(filename+' columns uploaded')
else:
   print(filename+' columns were not uploaded')
哪个需要pyarrow库,所以我使用以下方法安装它:
pip install pyarrow
我删除了与 sqlalchemy 相关的所有导入并保留以下内容:
import pandas as pd
import os
import snowflake.connector as snowCtx
import getpass
import json
import numpy as np
from datetime import date, datetime
import time
from snowflake.connector.pandas_tools import write_pandas

关于Python 和 Snowflake 使用 SQL Alchemy 引擎将新数据附加到现有表中返回当前 session 没有当前数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64991350/

相关文章:

python - Tensorflow 的 session 运行 feed_dict 方法的示例或解释?它有什么作用?

python 对象 AttributeError : type object 'Track' has no attribute 'title'

snowflake-cloud-data-platform - 有没有人有 "Best Practice"与雪花共享单元/集成/回归测试?

python sqlAlchemy : got InvalidRequestError after change class location

python - SqlAlchemy group_by 并返回最大日期

snowflake-cloud-data-platform - "File format does not exist or not authorized"更改雪花阶段时出错

snowflake-cloud-data-platform - 混合数组和字典的横向展平雪管数据

python - 使用正则表达式删除 <a> 并仅从具有特定语言的 html 行返回其文本

python - 查找并替换 POM 中两个单词之间的内容

python - 如何使用 SQLAlchemy 强制创建 backref InstrumentedAttributes