SQLAlchemy - MS Access 连接失败

Posted

技术标签:

【中文标题】SQLAlchemy - MS Access 连接失败【英文标题】:SQLAlchemy - MS Access connection failure 【发布时间】:2019-12-09 07:31:36 【问题描述】:

我正在尝试使用 sql alchemy 连接到 MS Access。我的访问是 64 位的。我已经尝试过 32 位 python 和 64 位 python。结果是一样的。

它使用 pyodbc 工作:

import pyodbc
from sqlalchemy import create_engine

class MSAccessConnector:

    def __init__(self, **kwargs):
        self.kwargs = kwargs

    def test_connection(self):
        try:

            conn = pyodbc.connect(r'Driver=Microsoft Access Driver (*.mdb, *.accdb);DBQ=C://Users//Gautam Sardana//Documents//gautam.accdb;')

            cursor = conn.cursor()
            return cursor


    except Exception as e:
        print(e)
    pass

MSAccessConnector().test_connection()

但使用 sqlalchemy 失败:

import pyodbc 
from sqlalchemy import create_engine

class MSAccessConnector:

    def __init__(self, **kwargs):
        self.kwargs = kwargs

    def test_connection(self):
        try:

            engine = create_engine(r'access:///C:/Users/Gautam Sardana/Documents/gautam.accdb')
            return engine

        except Exception as e:
            print(e)
        pass

    def connect(self):
        pass

MSAccessConnector().test_connection()

我得到错误:

无法加载插件:sqlalchemy.dialects:access

【问题讨论】:

【参考方案1】:

sqlalchemy-access 方言使用表单的连接 URI

access+pyodbc:// ...

不再支持以前的access:// ... 表单。

您也不能简单地提供 Access 数据库文件的路径,例如

access+pyodbc:///C:/Users/Gautam Sardana/Documents/gautam.accdb

相反,您必须提供 ODBC 系统/用户 DSN 的名称或直通 ODBC 连接字符串。例如,对于一个名为“accessDatabase1”的系统或用户 DSN,它指向一个正常的、未受保护的 Access 数据库文件,您将使用

access+pyodbc://@accessDatabase1

详情请参阅"Getting Connected" wiki page。

【讨论】:

为此,我收到错误“无法加载插件:sqlalchemy.dialects:access.pyodbc” pip install sqlalchemy-access ...吗? 是的,我做到了。我有一个问题,它可以使用 sqlite 吗? 是的,SQLAlchemy 可以与 SQLite 一起使用。您不需要外部方言。

以上是关于SQLAlchemy - MS Access 连接失败的主要内容,如果未能解决你的问题,请参考以下文章

sqlalchemy 无法连接到 ms sql server

连接 MS Access 而另一个应用程序使用相同的 MS Access 文件

ms-access 中的左连接和内连接

MS Access 中通过 ODBC 连接 MS SQL 表的查询非常慢

ODBC 连接凭据如何存储在 MS Access 中? [关闭]

ms-access 查询需要连接编号或计数