0 Вопрос: Запрос к базе данных Access через pyodbc иногда работает нормально, но иногда выдает ошибку соединения

вопрос создан в Wed, May 8, 2019 12:00 AM

Я пытаюсь выполнить SQL-запрос в локальной базе данных Access с помощью pyodbc.

В приведенном ниже коде печать имен таблиц работает нормально, поэтому, кажется, соединение установлено успешно:

import pyodbc
import pandas as pd

conn_str = (
    r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
    r'DBQ=O:\MAP\05_Reporting\2018_MAPDB_NewServer.accdb;'
    r'PWD=some_password;'
    r'UID=some_login;'
    )
cnxn = pyodbc.connect(conn_str)
cursor = cnxn.cursor()

def get_table_names():
    table_names = (table_info.table_name for table_info in cnxn.cursor().tables())
    return table_names

def get_query():
    sql = "SELECT MAID FROM dbo_MAMain"
    cursor.execute(sql)
    query = cursor.fetchall()
    return query

if __name__ == '__main__':
    table_names = get_table_names()
    for table_name in table_names:
        print(table_name) # this works fine

    query = get_query() # this gives a connection error
    print(query)

Однако строка query = get_query() выдаст ошибку, которая указывает на что-то противоположное:

  

Traceback (последний вызов был последним): файл "test.py", строка 28, в          query = get_query () Файл "test.py", строка 19, в get_query       cursor.execute (sql) pyodbc.Error: ('HY000', "[HY000] [Microsoft] [ODBC Microsoft Access Driver] ODBC - подключение к   Ошибка «MAP_SQL_2014». (-2001) (SQLExecDirectW) ")

Как я могу исправить ошибку?

    
0
  1. Попробуйте позвонить по номеру pyodbc.pooling = False перед вызовом pyodbc.connect.
    2019-05-08 16: 03: 54Z
  2. @ GordThompson: К сожалению, я все еще получаю ту же ошибку.
    2019-05-09 07: 08: 29Z
  3. Когда вы пытаетесь открыть таблицу "dbo_MAMain" из самого MS Access, вам предлагается ввести имя пользователя и пароль?
    2019-05-09 10: 15: 06Z
  4. Не специально для этой таблицы, но в целом да, я должен предоставить имя пользователя и пароль (то же самое, что я использую в коде выше), когда я пытаюсь получить доступ к любому из таблицы базы данных, запросы и т. д.
    2019-05-09 11: 18: 02Z
  5. Сразу после cursor = cnxn.cursor() попробуйте cursor.execute("SELECT COUNT(*) AS n FROM [ODBC;DSN=MAP_SQL_2014;UID=some_login;PWD=some_password].sys.tables"). Это может установить сквозное соединение от ACE к SQL_Server и разрешить выполнение последующих запросов связанных таблиц.
    2019-05-09 12: 28: 43Z
0 ответов                              0                         
источник размещен Вот