在 Python 中连接到 MS Access

Posted

技术标签:

【中文标题】在 Python 中连接到 MS Access【英文标题】:Connect to MS Access in Python 【发布时间】:2018-06-08 09:49:05 【问题描述】:

我尝试了很多来自 Internet 的示例,将 MS Access 连接到我的 python 项目,但没有成功

我在 Eclipse 中使用 Anaconda 有我的 python 项目,我的代码是:

import win32com.client
import pyodbc

def ado():
 '''
  connect with com dispatch objs
  '''
  conn = win32com.client.Dispatch(r'ADODB.Connection')
  DSN = ('PROVIDER = Microsoft.Jet.OLEDB.4.0;DATA SOURCE = ' + db +  ';')
  conn.Open(DSN)

  rs = win32com.client.Dispatch(r'ADODB.Recordset')
  strsql = "select * from Empresas"
  rs.Open(strsql, conn, 1, 3)
  t = rs.GetRows()
  conn.Close()
  return t

def odbc():
  '''
  connects with odbc
  '''        
  constr = 'Driver=Microsoft Access Driver (*.mdb, *.accdb);Dbq=' + db
  conn = pyodbc.connect(constr, autocommit=True)
  cur = conn.cursor()
  strsql = "select * from Empresas"
  cur.execute(strsql)
  t = list(cur)
 conn.close()
 return t

 if __name__ == '__main__':

  db = 'D:/EMP001/2018/example.mdb'
  data1 = ado()
  data2 = odbc()

使用 data1 我收到以下消息:

pywintypes.com_error: (-2147352567, 'Ocurrió una excepción.', (0, 'ADODB.Connection', 'No se encontró el proofedor especificado. Es posible que no esté instalado correctamente.', 'C:\WINDOWS \HELP\ADO270.CHM', 1240655, -2146824582), 无)

还有 data2 这个:

pyodbc.InterfaceError: ('IM002', '[IM002] [Microsoft][Administrador de controladores ODBC] No se encuentra el nombre del origen de datos y no se especificó ningún controlador predeterminado (0) (SQLDriverConnect)')

有什么想法吗?

【问题讨论】:

【参考方案1】:

您可能拥有 32 位 Access (Office) 和 64 位 Python。如您所知,32 位和 64 位是完全不兼容的。你需要安装 32 位 Python,或者将 Access (Office) 升级到 64 位,然后它就可以工作了。简而言之,您不能(在应用程序级别)将 64 位 Python.exe 连接到 32 位 MS Access ODBC 驱动程序 (odbcad32.exe),因为不同类型之间的数据存储和处理方式不同。但是,由于向后兼容,建议以最低公分母工作,因为 64 位操作系统可以运行 32 位应用程序,并且相同级别的程序可以相互“对话”。请查看下面的 URL 了解所有详细信息。

https://datatofish.com/how-to-connect-python-to-ms-access-database-using-pyodbc/

【讨论】:

【参考方案2】:

在这两种情况下,错误消息都表示找不到驱动程序 (ODBC) 或提供程序 (ADO)。

在 ODBC 中,您确定安装了这个驱动程序吗?

您可以使用pyodbc.drivers()获得可用驱动程序列表

例如,就我而言,我使用此驱动程序Microsoft Access Driver (*.mdb)读取 MS Access 数据

【讨论】:

是的,我在 windows 的管理工具上配置了我的 ODBC 驱动程序,但在 eclipse 中似乎无法识别。

以上是关于在 Python 中连接到 MS Access的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中连接到 MySQL 数据库?

如何在 Python 中连接到 MySQL 数据库?

如何在 Python 中连接到 MySQL 数据库?

如何在 Python 中连接到 MySQL 数据库?

无法在 Python 程序中连接到 MySQL

如何在 Windows 上的 Python 3 中连接到 MySQL?