0 Câu hỏi: Truy vấn cơ sở dữ liệu Access thông qua pyodbc đôi khi hoạt động tốt, nhưng đôi khi gây ra lỗi kết nối

câu hỏi được tạo ra tại Wed, May 8, 2019 12:00 AM

Tôi đang cố thực hiện truy vấn SQL trong cơ sở dữ liệu Access được lưu trữ cục bộ thông qua pyodbc.

Trong mã bên dưới, in tên bảng hoạt động tốt, do đó, kết nối dường như được thiết lập thành công:

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)

Tuy nhiên, dòng query = get_query() sẽ gây ra lỗi cho thấy điều gì đó ngược lại:

  

TracBack (cuộc gọi gần đây nhất vừa qua): Tệp "test.py", dòng 28, trong          query = get_query () Tệp "test.py", dòng 19, trong get_query       con trỏ.execute (sql) pyodbc.Error: ('HY000', "[HY000] [Microsoft] [ODBC Trình điều khiển truy cập Microsoft] ODBC - kết nối với   'MAP_Query_2014' không thành công. (-2001) (SQLExecDirectW) ")

Làm cách nào tôi có thể sửa lỗi?

    
0
  1. Hãy thử gọi pyodbc.pooling = False trước khi gọi pyodbc.connect.
    2019-05-08 16: 03: 54Z
  2. @ GordThndry: Đáng buồn thay, tôi vẫn gặp lỗi tương tự.
    2019-05-09 07: 08: 29Z
  3. Khi bạn thử mở bảng "dbo_MAMain" từ bên trong MS Access, bạn có được nhắc nhập tên người dùng và mật khẩu không?
    2019-05-09 10: 15: 06Z
  4. Không dành riêng cho bảng này, nhưng nói chung là có, tôi phải cung cấp tên người dùng và mật khẩu (giống như tôi sử dụng trong mã ở trên) khi tôi cố gắng truy cập bất kỳ các bảng, truy vấn của cơ sở dữ liệu, v.v.
    2019-05-09 11: 18: 02Z
  5. Ngay sau cursor = cnxn.cursor() thử cursor.execute("SELECT COUNT(*) AS n FROM [ODBC;DSN=MAP_SQL_2014;UID=some_login;PWD=some_password].sys.tables"). Điều đó có thể thiết lập kết nối chuyển tiếp từ ACE sang SQL_Server và cho phép các truy vấn bảng được liên kết tiếp theo chạy.
    2019-05-09 12: 28: 43Z
0 Câu trả lời                              0                         
nguồn đặt đây