【问题标题】:PYODBC not closing connection to Access DatabasePYODBC 未关闭与 Access 数据库的连接
【发布时间】: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


【解决方案1】:

我通过在文件 -> 选项 -> 信任中心中启用 VB 解决了这个问题。

【讨论】:

    猜你喜欢
    • 2020-10-20
    • 2011-12-29
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多