将sqlalchemy连接到MS Access

时间:2012-02-10 19:50:02

标签: python sql sqlalchemy

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

2 个答案:

答案 0 :(得分:5)

理论上,这将是通过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至少以类似的方式基于文件),然后使用它。

答案 1 :(得分: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))