python - подключение к базе данных с помощью pyodbc - не работает - PullRequest
2 голосов
/ 24 июня 2011

Я пытаюсь подключиться к базе данных Access 2007 со следующей строкой подключения.

conn = pyodbc.connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=<C:\Users\JSeinfeld\Desktop\Backup databases\Database_6.7.accdb>;")

Я получаю эту ошибку:

Traceback (последний последний вызов):
Файл "", строка 1, в conn = pyodbc.connect ("Driver = {Microsoft Драйвер доступа (* .mdb, * .Accdb)}; DBQ =; ")

Ошибка: ('HY000', "[HY000] [Microsoft] [ODBC Microsoft Access Driver] Общая ошибка Невозможно открыть ключ реестра Временный (изменчивый) Ace DSN для процесса 0x167c Тема 0x1568 DBC 0x1c67a5c

Jet. (63) (SQLDriverConnectW); [HY000] [Microsoft] [ODBC Microsoft Драйвер доступа] Общая ошибка Невозможно открыть ключ реестра Временный (volatile) Ace DSN для процесса 0x167c Тема 0x1568 DBC 0x1c67a5c

Jet. (63); [HY000] [Microsoft] [ODBC Microsoft Access Driver] Недействительно имя файла. (-1044); [HY000] [Microsoft] [ODBC Microsoft Access Driver] Общая ошибка Невозможно открыть ключ реестра Временный (изменчивый) Ace DSN для процесса 0x167c Тема 0x1568 DBC 0x1c67a5c

Jet. (63); [HY000] [Microsoft] [ODBC Microsoft Access Driver] Общая ошибка Невозможно открыть ключ реестра Временный (изменчивый) Ace DSN для процесса 0x167c Нить 0x1568 DBC 0x1c67a5c

Jet. (63); [HY000] [Microsoft] [ODBC Microsoft Access Driver] Недействительно имя файла. (-1044) ")

Есть еще один вопрос, подобный этому, на SO, но была проблема совместимости с 32/64 битами, которой у меня нет. Кажется, нет хорошего ответа на этот вопрос, но, надеюсь, кто-то может помочь мне подключиться к моей базе данных, потому что я не знаю другого способа запроса или записи данных в Access 2007 с помощью python.

Спасибо

Ответы [ 4 ]

3 голосов
/ 04 августа 2011

Была такая же проблема - это был простой случай экранирования от обратной косой черты, используемой в местоположении доступа db

>>> conn = pyodbc.connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\\access\\site_be.accdb;")

работал как тогда как

>>> conn = pyodbc.connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\access\site_be.accdb;")

давал мне ошибку Jet'. (63); [HY000] [Microsoft][ODBC Microsoft Access Driver] Not a valid file name. (-1044)")

Надеюсь, это помогло ..

1 голос
/ 24 июня 2011

Попробуйте убрать скобки из имени файла.

conn = pyodbc.connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:\Users\JSeinfeld\Desktop\Backup databases\Database_6.7.accdb")
0 голосов
/ 11 августа 2011

Фабиолус понял все правильно.

Символ обратной косой черты означает, что следующий символ имеет специальное значение в строке. Итак, расшифровка двойной обратной косой черты ... Первая обратная косая черта говорит Python подготовиться к специальному символу строки, вторая обратная косая черта - это специальный символ строки (который в данном случае является обратной косой чертой)

\n = newline
\t = tab
\\ = backslash
0 голосов
/ 02 августа 2011

Есть ли в вашей папке файл * .ldb?

У меня были очень похожие сообщения об ошибках, но мое также включало "файл уже используется".В моем случае я наконец понял, что была блокировка базы данных (файл .ldb рядом с .mdb).У меня запущена служба, которая использует базу данных все время - наверное, пришло время переключиться на многопользовательский движок базы данных.

В качестве эксперимента я сделал копию базы данных, и pyodbc подключился ккопия просто отлично.Это, очевидно, не является долгосрочным решением, но, по крайней мере, теперь я знаю, в чем проблема.

...