为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

喵喔喔 2023-12-26 17:04:09
我正在尝试使用 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 完成相同的工作,但想使用专门的雪花连接。
查看完整描述

1 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

将pandas.DataFrame.to_sql与 Snowflake 一起使用时,需要使用 SQLAlchemy 引擎作为连接。

当您使用 时df.to_sql,您需要传入 SQLAlchemy 引擎而不是标准 Snowflake 连接对象(也不是您尝试做的游标)。您需要snowflake-sqlalchemy使用 pip 安装,但不需要安装snowflake-connector-python,因为 Snowflake-sqlalchemy 会为您完成此操作。

这是一个例子:

from sqlalchemy import create_engine

import os

import pandas as pd


snowflake_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表中。


查看完整回答
反对 回复 2023-12-26
  • 1 回答
  • 0 关注
  • 128 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信