【发布时间】:2020-03-20 11:20:55
【问题描述】:
我正在尝试使用 PYODBC 从 Access 数据库中加载数据。 我写的代码是这样的:
#Connection Parameters
MDB = 'C:/Users/xxxx/Documents/EugeneVideo.mdb'
DRV = '{Microsoft Access Driver (*.mdb, *.accdb)}'
PWD = 'PW'
pyodbc.pooling = False
con = pyodbc.connect('DRIVER={};DBQ={};PWD={}'.format(DRV,MDB,PWD))
SQL = """SELECT * FROM Customers WHERE c_state = 'CA' """
df = pd.read_sql_query(SQL, con)
csr = con.cursor()
csr.close()
con.close()
第一次,它运行良好。 数据存储在数据框中。 但是,如果我尝试再次运行脚本,例如更改过滤器参数,python 就会崩溃。 我注意到 LDB 文件在第一次运行后没有被删除,所以很明显,即使我明确要求连接也没有关闭。 错误在哪里?有没有更好的方法来确保连接将被关闭? 我已经尝试过类方法,结果相似。
干杯
【问题讨论】:
-
如果你废弃
csr = con.cursor()和csr.close(),它会做同样的事情吗?您似乎没有打开光标,这是一件奇怪的事情(通常您打开光标,使用该光标执行查询,使用该光标滚动结果,然后关闭光标,现在您只是打开和关闭一个)。 -
我无法在 Access 2013 中使用 pyodbc 4.0.30 和 pandas 1.0.3 重现您的问题。对我来说 .ldb 文件实际上已被删除,我可以在其中多次运行测试脚本演替。您的特定环境一定有问题。
-
实际上,我已经在一些类似问题的提示之后添加了关闭行。最初他们不在那里。如何使用游标运行查询?我在其他机器上尝试过,但存在兼容性问题(访问 32 位/Conda 64 位),所以我遵循了这个提示:datatofish.com/…我已经卸载了 Office 2016,安装了 de Microsoft 软件包并重新安装了 Office 2016 ,但这次是 64 位版本。我的一个朋友说它对她有用,所以我想看看问题出在哪里。我试试看。
-
我刚刚在我的个人机器上进行了测试。 Office 2016 64 位和 Conda 64 位。在安装 Office 之前,我已经安装了 Microsoft Access Database Engine 2016 Redistributable 以确保安全。现在它按我预期的那样工作,代码上没有光标。不过,仍然喜欢听到有关使用游标运行查询的信息。谢谢。
标签: pandas ms-access connection pyodbc