猿问

AttributeError:“SnowflakeCursor”对象没有属性“cursor”

我正在尝试使用 to_sql 方法将我的 DataFrame 写入 Snowflake。


sf_conn = snowflake.connector.connect(

    account=*****,

    user=*****,

    password=*****,

    role=*****,

    warehouse=*****,

    database=*****

    

)


sf_cur = sf_conn.cursor()

df = pd.DataFrame([('Mark', 10), ('Luke', 20)], columns=['name', 'balance'])

df.to_sql('TEST3',con=sf_cur, schema='public', index=False)

但还没有运气。


File "/home/karma/.local/lib/python3.6/site-packages/pandas/io/sql.py", line 1584, in execute

    cur = self.con.cursor()

AttributeError: 'SnowflakeCursor' object has no attribute 'cursor'

甚至尝试给予con=sf_conn但收到以下错误:


pandas.io.sql.DatabaseError: Execution failed on sql 'SELECT name FROM sqlite_master WHERE type='table' AND name=?;': not all arguments converted during string formatting

我可以使用 sqlAlchemy create_engine lib 完成相同的工作,但想使用专门的雪花连接。


喵喔喔
浏览 129回答 1
1回答

catspeake

将pandas.DataFrame.to_sql与 Snowflake 一起使用时,需要使用 SQLAlchemy 引擎作为连接。当您使用 时df.to_sql,您需要传入 SQLAlchemy 引擎而不是标准 Snowflake 连接对象(也不是您尝试做的游标)。您需要snowflake-sqlalchemy使用 pip 安装,但不需要安装snowflake-connector-python,因为 Snowflake-sqlalchemy 会为您完成此操作。这是一个例子:from sqlalchemy import create_engineimport osimport pandas as pdsnowflake_username = os.environ['SNOWFLAKE_USERNAME']snowflake_password = os.environ['SNOWFLAKE_PASSWORD']snowflake_account = os.environ['SNOWFLAKE_ACCOUNT']snowflake_warehouse = os.environ['SNOWFLAKE_WAREHOUSE']snowflake_database = 'test_db'snowflake_schema = 'public'if __name__ == '__main__':    engine = create_engine(        'snowflake://{user}:{password}@{account}/{db}/{schema}?warehouse={warehouse}'.format(            user=snowflake_username,            password=snowflake_password,            account=snowflake_account,            db=snowflake_database,            schema=snowflake_schema,            warehouse=snowflake_warehouse,        )    )    df = pd.DataFrame([('Mark', 10), ('Luke', 20)], columns=['name', 'balance'])    df.to_sql('TEST_TABLE', con=engine, schema='public', index=False, if_exists='append')每次我运行上面的脚本时,马可福音和路加福音的记录都会附加到我的test_db.public.test_table表中。
随时随地看视频慕课网APP

相关分类

Python
我要回答