gpt4 book ai didi

python - to_sql pandas 数据框进入 SQL 服务器错误 : DatabaseError

转载 作者:太空狗 更新时间:2023-10-30 00:47:49 26 4
gpt4 key购买 nike

在尝试将 pandas 的数据帧写入 sql-server 时,出现此错误:

DatabaseError: Execution failed on sql 'SELECT name FROM sqlite_master WHERE type='table' AND name=?;': ('42S02', "[42S02] [Microsoft][SQL Server Native Client 11.0][SQL Server]Invalid object name 'sqlite_master'. (208) (SQLExecDirectW); [42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]Statement(s) could not be prepared. (8180)")

似乎 pandas 正在研究 sqlite 而不是真正的数据库。

这不是连接问题,因为我可以使用 pandas.read_sql 从具有相同连接的 sql-server 读取数据已使用

设置连接
sqlalchemy.create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)

这也不是数据库权限问题,因为我可以使用与以下相同的连接参数逐行编写:

cursor = conn.cursor()
cursor.execute('insert into test values (1, 'test', 10)')
conn.commit()

我可以编写一个循环来逐行插入,但我想知道为什么 to_sql 对我不起作用,而且我担心它不会那么高效。

环境:Python:2.7 Pandas :0.20.1sqlalchemy:1.1.12

提前致谢。

可运行示例:

import pandas as pd
from sqlalchemy import create_engine
import urllib

params = urllib.quote_plus("DRIVER={SQL Server Native Client 11.0};SERVER=
<servername>;DATABASE=<databasename>;UID=<username>;PWD=<password>")
engine = create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)

test = pd.DataFrame({'col1':1, 'col2':'test', 'col3':10}, index=[0])
conn=engine.connect().connection
test.to_sql("dbo.test", con=conn, if_exists="append", index=False)

最佳答案

根据to_sql doccon 参数是 SQLAchemy 引擎或旧版 DBAPI2 连接 (sqlite3)。因为您传递的是连接对象而不是 SQLAlchemy 引擎对象作为参数,所以 pandas 推断您传递的是 DBAPI2 连接或 SQLite3 连接,因为它是唯一受支持的连接。要解决这个问题,只需执行以下操作:

myeng = sqlalchemy.create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)

# Code to create your df
...

# Now write to DB
df.to_sql('table', myeng, index=False)

关于python - to_sql pandas 数据框进入 SQL 服务器错误 : DatabaseError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45326026/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com