Pandas MS Access dataframe to_sql抛出无效的精度值

Pandas MS Access dataframe to_sql抛出无效的精度值,pandas,dataframe,ms-access,pyodbc,sqlalchemy-access,Pandas,Dataframe,Ms Access,Pyodbc,Sqlalchemy Access,我正在使用pandas dataframe的to_sql函数将记录保存到MS Access 97 MDB。但我得到的错误如下: pyodbc.Error: ('HY104', '[HY104] [Microsoft][ODBC Microsoft Access Driver]Invalid precision value (98) (SQLBindParameter)'). 我正在Windows10工作站上使用Python 3.8.5 32位 我还安装了以下库 datacompy==0.7

我正在使用pandas dataframe的to_sql函数将记录保存到MS Access 97 MDB。但我得到的错误如下:

pyodbc.Error: ('HY104', '[HY104] [Microsoft][ODBC Microsoft Access Driver]Invalid 
precision value  (98) (SQLBindParameter)').
我正在Windows10工作站上使用Python 3.8.5 32位

我还安装了以下库

datacompy==0.7.1
et-xmlfile==1.0.1
jdcal==1.4.1
numpy==1.19.2
openpyxl==3.0.5
pandas==1.1.2
pyodbc==4.0.30
python-dateutil==2.8.1
pytz==2020.1
pywin32==228
six==1.15.0
SQLAlchemy==1.3.19
sqlalchemy-access==1.0.7

提前谢谢

在使用Access_97数据库文件时,您遇到了Access ODBC驱动程序的限制。在Python_3中,所有字符串都是Unicode,但Access直到Access_2000才开始支持Unicode

此代码因您描述的错误而失败

num\u characters=128
df=pd.DataFrame(
[
(
1.
“x”*num_个字符,
)
],
列=[“ID”,“TextField”],
)
df.to_sql(“sa_a_test”,引擎,index=False,如果存在=“append”)
对于使用Access_97(Jet 3.5).mdb文件时大于127的
num_字符的值。使用Access_2000(Jet 4.0).mdb文件时,相同的代码不会失败

作为一种解决方法,您可能可以使用类似的方法

cnxn=engine.raw_连接()
crsr=cnxn.cursor()
sql=“插入[sa_a_测试]([ID],[TextField])值(?,)”
crsr.setinputsizes([(pyodbc.SQL\u INTEGER,),(pyodbc.SQL\u LONGVARCHAR,)]
crsr.executemany(sql,df.itertuples(index=False))
cnxn.commit()

但更好的解决方案是将数据库文件升级到新版本。Access_97文件格式多年来一直被弃用,现在Microsoft完全不支持它。

请提供完整的代码块,包括
导入
行,而不仅仅是错误消息。另外,请用
dtypes
发布熊猫数据框的样本。代码和数据都有助于我们重现您的问题。谢谢你的回答!然而,我们不能仅仅因为一个遗留软件而将MS Access从97升级到更新的版本。上面建议的代码对我不起作用。然而,将编码/解码重写为UTF-8是可行的。导入pyodbc conn=branch\u db\u conn.raw\u connection()conn.setdecoding(pyodbc.SQL\u WCHAR,encoding='utf-8')conn.setencoding(encoding='utf-8')cursor=conn.cursor()