Подключение к базе данных Linked Access с использованием pyodbc - PullRequest
1 голос
/ 10 апреля 2019

Я пытаюсь получить данные из базы данных Microsoft Access.Проблема заключается в количестве ограничений, на которые я нахожусь:

  1. Я должен использовать 64-битный Python
  2. База данных доступа состоит из связанных таблиц с другой базой данных
  3. Для другой базы данных требуется 32-разрядный драйвер Oracle

Поэтому у меня база данных Access хранится локально, и я пытаюсь подключиться к ней с помощью PyODBC.

Я пробовалоглядываться и возиться со строкой соединения, но эта проблема кажется довольно уникальной.

В настоящее время это измененная версия того, что у меня есть:

import pyodbc

dbPATH = r'C:\path\to\database.accdb'
UID = 'username'
PWD = 'username'

driver = r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
credentials = r'DBQ=%s;UID=%s;PWD=%s'%(dbPATH, UID, PWD)
conn_str = driver + credentials

connection = pyodbc.connect(conn_str)
cursor = connection.cursor()
cursor.execute("select * from [table_name];")

for row in cursor.fetchone():
    print(row)

Это ошибка, которую я обычно получаю:

pyodbc.Error: ('HY000', "[HY000] [Microsoft][ODBC Microsoft Access Driver] ODBC--connection to '{Oracle in OraClient11g_home1_32bit}' failed. (-2001) (SQLExecDirectW)")

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

Я попытался установить

pyodbc.pooling = False

но это ничего не изменило.

1 Ответ

1 голос
/ 12 апреля 2019

У вас есть два взаимоисключающих ограничения:

  1. Мне нужно использовать 64-битный Python

... и ...

Для другой базы данных требуется 32-разрядный драйвер Oracle

64-разрядные процессы не могут использовать 32-разрядные драйверы ODBC;они просто не совместимы.Если остальная часть вашего стека (драйвер Oracle ODBC, приложения Microsoft Office / Access) является 32-разрядной, то вам потребуется 32-разрядная версия Python, если вы хотите работать со связанными таблицами, так какописано.

Дополнительное примечание. Ваше утверждение о том, что «для другой базы данных требуется 32-разрядный драйвер Oracle», сомнительно.Клиент-серверные базы данных, такие как Oracle, SQL Server и т. Д., Не особенно заботятся о том, получают ли они запросы от 32-разрядного или 64-разрядного клиента.Могут быть различия в деталях на стороне клиента , но это для драйвера ODBC (и / или диспетчера драйверов ODBC) на клиенте, чтобы выяснить.

...