我正在尝试使用 python 将 excel 数据导入到 ms access 文件中。
在我的代码下面;
import pandas as pd
import urllib.parse
import sqlalchemy
from sqlalchemy import create_engine
import os
os.getcwd()
Chd= os.chdir('D:/NX_BACKWORK/Feeder Setup_PROCESS')
Chd = os.getcwd()
#xls = pd.ExcelFile('Upload-Data.xlsx',engine='openpyxl')
df1 = pd.read_excel('123.xlsx', sheet_name='T_PBAR')
print(df1.head(10))
print('open mdb')
cnnstr = (
r"Driver={Microsoft Access Driver (*.mdb, *.accdb)};"
r"DBQ=D:\NX_BACKWORK\Feeder Setup_PROCESS\MODEL.mdb"
)
cnnurl = f"access+pyodbc:///?odbc_connect={urllib.parse.quote_plus(cnnstr)}"
acc_engine = create_engine(cnnurl)
print('writing to access')
df1.to_sql("T_PBAR",acc_engine, if_exists='append')
print('write complete')
这是我在下面的行中遇到的错误
df1.to_sql("T_PBAR",acc_engine, if_exists='append')
发生异常:InterfaceError (pyodbc.InterfaceError) ('IM002', '[IM002] [Microsoft][ODBC 驱动程序管理器] 未找到数据源名称且未指定默认驱动程序 (0) (SQLDriverConnect)') (此错误的背景位于:https://sqlalche.me/e/20/rvf5) pyodbc.InterfaceError: ('IM002', '[IM002] [Microsoft][ODBC 驱动程序管理器] 未找到数据源名称且未指定默认驱动程序 (0) (SQLDriverConnect)')
上述异常是导致以下异常的直接原因:
文件“C:\Users\zen\OneDrive\Documents\Python\PandasAPP\TESTNGpy.py”,第 67 行,位于 df1.to_sql("T_PBAR",acc_engine, if_exists='追加') sqlalchemy.exc.InterfaceError: (pyodbc.InterfaceError) ('IM002', '[IM002] [Microsoft][ODBC 驱动程序管理器] 未找到数据源名称且未指定默认驱动程序 (0) (SQLDriverConnect)') (此错误的背景位于:https://sqlalche.me/e/20/rvf5)
需要支持
您遇到的错误表明 ODBC 驱动程序配置存在问题。您可以采取以下几个步骤来解决该问题:
检查 ODBC 驱动程序安装: 确保您的计算机上安装了 Microsoft Access ODBC 驱动程序。如果没有,您可以到微软官方网站下载并安装。
在连接字符串中使用正确的驱动程序: 确保连接字符串中指定的 ODBC 驱动程序与已安装的驱动程序匹配。对于 Access 数据库,您应该使用
Microsoft Access Driver (*.mdb, *.accdb)
。
指定 ODBC 驱动程序的完整路径: 修改连接字符串以包含 ODBC 驱动程序的完整路径。按如下方式更新
cnnstr
变量:
cnnstr = (
r"Driver={Microsoft Access Driver (*.mdb, *.accdb)};"
r"DBQ=D:\NX_BACKWORK\Feeder Setup_PROCESS\MODEL.mdb;"
r"DriverId=25;"
r"FIL=MS Access;"
r"MaxBufferSize=2048;"
)
使用
pypyodbc
库:
尝试使用 pypyodbc
库而不是 pyodbc
。确保它已安装(pip install pypyodbc
),然后相应地修改您的代码:
import pypyodbc
# ...
cnnurl = f"DRIVER={{Microsoft Access Driver (*.mdb, *.accdb)}};DBQ={Chd}\\MODEL.mdb"
acc_conn = pypyodbc.connect(cnnurl)
acc_cursor = acc_conn.cursor()
# ...
df1.to_sql("T_PBAR", acc_engine, if_exists='append', index=False)
更新
cnnurl
变量以使用正确的驱动程序和数据库路径。
确保访问权限: 确保运行 Python 脚本的用户具有访问 Access 数据库所需的权限。
进行这些更改后,尝试再次运行脚本。如果问题仍然存在,检查是否有任何其他错误消息或详细信息可能会有所帮助,以便更深入地了解问题。