【发布时间】:2021-01-24 07:41:45
【问题描述】:
我有一个巨大的表(147 列),我想知道是否可以从我的 pandas 数据框在 SQL Server 中创建表,因此我不必为 147 列使用CREATE TABLE。
我正在尝试遵循大多数相关问题的回答:
params = urllib.parse.quote_plus("DRIVER={ODBC Driver 17 for SQL Server};SERVER=DESKTOP-LFOSSEF;DATABASE=test;UID=xxxx;PWD=xxx")
engine = create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)
connection = engine.raw_connection()
df.to_sql("table_name", connection,index=False)
user 和 password 有效,因为这是我用来登录 sqlserver 的。
当我运行它时,我得到:
sql 'SELECT name FROM sqlite_master WHERE 执行失败 type='table' AND name=?;': ('42S02', "[42S02] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]无效的对象名称'sqlite_master'。 (208) (SQLExecDirectW); [42S02] [Microsoft][用于 SQL 的 ODBC 驱动程序 17 服务器][SQL Server]无法准备语句。 (8180)")
如果我删除connection = engine.raw_connection() 并直接使用engine,我会得到:
AttributeError: 'Engine' 对象没有属性 'cursor'
知道有什么问题吗?我需要先创建一个空表吗?我已经排查了好几个小时,但找不到任何原因导致这不起作用。
【问题讨论】:
-
将
engine作为第二个参数传递给to_sql()应该可以工作。你使用的是什么版本的 SQLAlchemy 和 pandas? -
分别使用('1.3.22', '0.25.3')
-
什么是
type(engine)? -
sqlalchemy.engine.base.Engine,虽然不知道如何到达sqlalchemy -
那是正确的类型。 This code 对我来说很好。也许您的 SQLAlchemy 安装已损坏。你可以试试
pip uninstall sqlalchemy,然后是pip install sqlalchemy,看看是否有帮助。
标签: python sql-server sqlalchemy pyodbc