将 sqlalchemy 连接到 MS Access

Posted

技术标签:

【中文标题】将 sqlalchemy 连接到 MS Access【英文标题】:connecting sqlalchemy to MSAccess 【发布时间】:2012-03-03 06:49:19 【问题描述】:

如何使用 SQLAlchemy 连接到 MS Access?在他们的网站上,它说连接字符串是 access+pyodbc。这是否意味着我需要 pyodbc 进行连接?由于我是新手,请温柔。

【问题讨论】:

【参考方案1】:

理论上这将是通过 create_engine("access:///some_odbc_dsn"),但 Access 后端自 SQLAlchemy 0.5 以来根本没有投入使用,而且目前也不清楚它当时的工作情况如何(这就是为什么它在http://docs.sqlalchemy.org/en/latest/core/engines.html#supported-databases 被称为“开发”的原因 - “开发”的意思是,“方言的开发版本存在,但尚不可用”)。现在没有足够的兴趣/志愿者来保持这种方言的运行。 (当/如果是,你会在http://docs.sqlalchemy.org/en/latest/dialects/access.html看到它)。

您现在对 Access 的最佳选择是将数据导出到 SQLite 数据库文件(或者当然是其他一些数据库,尽管 SQLite 至少以类似的方式基于文件),然后使用它。

2019 年 9 月更新:

sqlalchemy-access 方言已经复活。详情here。

使用示例:

engine = create_engine("access+pyodbc://@some_odbc_dsn")

【讨论】:

【参考方案2】:

我主要需要读取权限和一些简单的查询。最新版本的 sqlalchemy 具有(损坏的)访问后端模块,但它没有注册为入口点。

它需要一些修复,但这对我有用:

def fixup_access():
    import sqlalchemy.dialects.access.base
    class FixedAccessDialect(sqlalchemy.dialects.access.base.AccessDialect):
        def _check_unicode_returns(self, connection):
            return True
        def do_execute(self, cursor, statement, params, context=None, **kwargs):
            if params == :
                params = ()
            super(sqlalchemy.dialects.access.base.AccessDialect, self).do_execute(cursor, statement, params, **kwargs)

    class SomeObject(object):
        pass
    fixed_dialect_mod = SomeObject
    fixed_dialect_mod.dialect = FixedAccessDialect
    sqlalchemy.dialects.access.fix = fixed_dialect_mod

fixup_access()

ENGINE = sqlalchemy.create_engine('access+fix://admin@/%s'%(db_location))

【讨论】:

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

SQLAlchemy - MS Access 连接失败

使用 sqlalchemy 连接到 mssql 数据库时遇到问题

使用 SQLAlchemy 连接到 Amazon Aurora

使用 odbc_connect 从 SQLAlchemy 连接到 SQL 服务器

使用 sqlalchemy 连接到本地 postgresql

使用 SQLAlchemy 连接到 Oracle 数据库