我总是在几天前将数千个参数存储到我的数据库(SQL服务器)中。 我使用spyder(Python 3.6)。 我用conda update更新了所有软件包 - 几天前,现在我无法将我的数据框导入到我的数据库中。
---我不希望在2100参数DF ---
中拆分解决方法我想了解改变了什么以及为什么以及如何回到工作岗位。
这是一个简单的代码:
import pyodbc
import sqlalchemy
import numpy as np
import pandas as pd
c = pyodbc.connect("Driver={SQL Server};Server=**;Trusted_Connection=no;Database=*;UID=*;PWD=*;")
cursor = c.cursor()
engine = sqlalchemy.create_engine('mssql+pyodbc://*:*/*?driver=SQL+Server')
df= pd.DataFrame(np.random.randn(5000))
df.to_sql('pr',engine,if_exists= 'append', index=False)
这是错误: ProgrammingError:(pyodbc.ProgrammingError)('42000','[42000] [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]传入的请求参数太多。服务器最多支持2100个参数。减少数量参数并重新发送请求。(8003)(SQLExecDirectW)')
非常感谢
答案 0 :(得分:2)
对于pandas 0.23中的这个错误,有一个开放的(截至2018.06.01)standard。
您可能希望降级到0.22,这可以按预期工作。
答案 1 :(得分:0)
尝试限制块大小:
df.to_sql('pr',
engine,
chunksize=20,
if_exists= 'append',
index=False)
这对我有用。认为选择正确的块大小数字的数学公式是: chunksize = 2100 /您的列数