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

新手上路,请多包涵

在尝试将 pandas ‘ 数据帧写入 sql-server 时,我收到此错误:

DatabaseError: 执行失败 sql ‘SELECT name FROM sqlite_master WHERE type=‘table’ AND name=?;‘: (‘42S02’, “[42S02] [Microsoft][SQL Server Native Client 11.0][SQL Server]无效的对象名称’sqlite_master’。(208)(SQLExecDirectW);[42000][Microsoft][SQL Server Native Client 11.0][SQL Server]无法准备语句。(8180)“)

似乎 pandas 正在调查 sqlite 而不是真正的数据库。

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

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.1 sqlalchemy :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)

原文由 AlexSB 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 913
1 个回答

尝试这个。可以连接 MS SQL 服务器(SQL 身份验证)和更新数据

from sqlalchemy import create_engine
params = urllib.parse.quote_plus(
'DRIVER={ODBC Driver 13 for SQL Server};'+
'SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)

engine = create_engine("mssql+pyodbc:///?odbc_connect=%s" % params)

#df: pandas.dataframe; mTableName:table name in MS SQL
#warning: discard old table if exists
df.to_sql(mTableName, con=engine, if_exists='replace', index=False)

原文由 CaiYongAn 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题