在尝试将 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 许可协议
尝试这个。可以连接 MS SQL 服务器(SQL 身份验证)和更新数据