pypyodbc は .accdb データベース内のリンクされたテーブルにどのように接続できますか? これはまったく可能ですか、それとも pyodbc の制限ですか?
MS Acess .accdb データベースから Python にデータを取得する必要があります。これは完全に機能しpypyodbc
、.accdb データベース内で定義されたテーブルとクエリにアクセスするために使用できます。ただし、データベースには、外部 SQL Server にリンクされたテーブルもあります。このようなリンクされたテーブルにアクセスpypyodbc
すると、SQL サーバーに接続できないと訴えます。
test.accdb
Test
(ローカル テーブル) とcidb_ain
(リンクされた SQL テーブル)の2 つのテーブルが含まれています。
次の Python 3 コードは、データにアクセスしようとする試みです。
import pypyodbc as pyodbc
cnxn = pyodbc.connect(driver='Microsoft Access Driver (*.mdb, *.accdb)',
dbq='test.accdb',
readonly=True)
cursor = cnxn.cursor()
# access to the local table works
for row in cursor.execute("select * from Test"):
print(row)
print('----')
# access to the linked table fails
for row in cursor.execute("select * from cidb_ain"):
print(row)
出力:
(1, 'eins', 1)
(2, 'zwei', 2)
(3, 'drei', 3)
----
Traceback (most recent call last):
File "test_02_accdb.py", line 14, in <module>
for row in cursor.execute("select * from cidb_ain"):
File "C:\software\installed\miniconda3\lib\site-packages\pypyodbc.py", line 1605, in execute
self.execdirect(query_string)
File "C:\software\installed\miniconda3\lib\site-packages\pypyodbc.py", line 1631, in execdirect
check_success(self, ret)
File "C:\software\installed\miniconda3\lib\site-packages\pypyodbc.py", line 986, in check_success
ctrl_err(SQL_HANDLE_STMT, ODBC_obj.stmt_h, ret, ODBC_obj.ansi)
File "C:\software\installed\miniconda3\lib\site-packages\pypyodbc.py", line 964, in ctrl_err
raise Error(state,err_text)
pypyodbc.Error: ('HY000', "[HY000] [Microsoft][ODBC-Treiber für Microsoft Access] ODBC-Verbindung zu 'SQL Server Native Client 11.0SQLHOST' fehlgeschlagen.")
エラー メッセージは、大まかに「'SQL Server Native Client 11.0SQLHOST' への ODBC 接続に失敗しました」と訳されます。
pypyodbc を使用して .accdb データベースを介して SQL Server にアクセスすることはできませんが、cidb_ain
MS Access 内からテーブルをクエリすることは可能です。さらに、SQL Server に直接接続できます。
cnxn = pyodbc.connect(driver='SQL Server Native Client 11.0',
server='SQLHOST',
trusted_connection='yes',
database='stuffdb')
(1)MS Access(およびMatlabも)が.accdbファイルに含まれる情報を使用してリンクされたテーブルを照会できること、および(2)SQL Serverにアクセスできることを考慮すると、問題はに関連していると思いますpypyodbc
. (エラーメッセージでドライバ名とホスト名がめちゃくちゃにされている方法'SQL Server Native Client 11.0SQLHOST'
も、やや疑わしいようです。)
私は以前に Access を使用したことがないので、しばらくお待ちください。不要と思われる重要な情報を省略した場合はお知らせください...