将SQLAlchemy连接到MSAccess
我该如何用SQLAlchemy连接到MS Access数据库呢?在他们的网站上说连接字符串是access+pyodbc。这是不是意味着我需要安装pyodbc才能连接?因为我还是个新手,请多多指教。
2 个回答
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))
15
理论上,你可以通过 create_engine("access:///some_odbc_dsn") 来实现这个功能,但自从 SQLAlchemy 0.5 以来,Access 后端就一直没有在使用中,而且当时它的工作情况也不太清楚(这就是为什么在 http://docs.sqlalchemy.org/en/latest/core/engines.html#supported-databases 上标注为“开发中”的原因——“开发中”意味着“这个方言的开发版本存在,但还不能使用”)。目前没有足够的兴趣和志愿者来维护这个方言。(如果将来有的话,你可以在 http://docs.sqlalchemy.org/en/latest/dialects/access.html 上看到它)。
现在你最好的选择是把数据导出到一个 SQLite 数据库文件中(当然也可以导出到其他数据库,不过 SQLite 也是基于文件的,至少在某种程度上是这样),然后使用那个。
更新,2019年9月:
sqlalchemy-access 方言已经恢复了。详细信息请见 这里。
使用示例:
engine = create_engine("access+pyodbc://@some_odbc_dsn")