将 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 连接到 mssql 数据库时遇到问题
使用 SQLAlchemy 连接到 Amazon Aurora
使用 odbc_connect 从 SQLAlchemy 连接到 SQL 服务器