подключение sqlalchemy к MSAccess - PullRequest
4 голосов
/ 10 февраля 2012

Как я могу подключиться к MS Access с помощью SQLAlchemy?На их сайте написано, что строка подключения - это access + pyodbc.Означает ли это, что мне нужно иметь pyodbc для подключения?Так как я новичок, пожалуйста, будьте вежливы.

Ответы [ 2 ]

5 голосов
/ 11 февраля 2012

Теоретически это было бы через 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 по крайней мере основан на файлах), а затем использовать это.

2 голосов
/ 13 декабря 2012

Мне прежде всего требовался доступ для чтения и несколько простых запросов. Последняя версия 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...