web-dev-qa-db-ja.com

pythonで.mdbアクセスファイルを処理する方法

誰かが.mdbファイルをPythonで開く方法について正しい方向に私を指すことができますか?私は通常、議論を始めるためにいくつかのコードを含めるのが好きですが、どこから始めればいいのかわかりません。私はPythonでmysqlをかなり使います。同様の方法で.mdbファイルを操作する方法があるかどうか疑問に思っていましたか?

39
Richard

以下は another SO question のために書いたコードです。
サードパーティの pyodbcモジュール が必要です。

この非常に単純な例では、テーブルに接続し、結果をファイルにエクスポートします。
ご質問がある場合は、より具体的なニーズに合わせて自由に拡大してください。

import csv, pyodbc

# set up some constants
MDB = 'c:/path/to/my.mdb'
DRV = '{Microsoft Access Driver (*.mdb)}'
PWD = 'pw'

# connect to db
con = pyodbc.connect('DRIVER={};DBQ={};PWD={}'.format(DRV,MDB,PWD))
cur = con.cursor()

# run a query and get the results 
SQL = 'SELECT * FROM mytable;' # your query goes here
rows = cur.execute(SQL).fetchall()
cur.close()
con.close()

# you could change the mode from 'w' to 'a' (append) for any subsequent queries
with open('mytable.csv', 'wb') as fou:
    csv_writer = csv.writer(fou) # default field-delimiter is ","
    csv_writer.writerows(rows)
46
bernie
4
pyfunc

mubetools を介してMicrosoft Accessデータベースを読み取ることができる Reuben Cummingsのmezaライブラリ があります。

Installation

# The mdbtools package for Python deals with MongoDB, not MS Access. 
# So install the package through `apt` if you're on Debian/Ubuntu
$ Sudo apt install mdbtools
$ pip install meza

使用法

>>> from meza import io

>>> records = io.read('database.mdb') # only file path, no file objects
>>> print(next(records))

Table1
Table2
…
3
jnns

Javaを実行できるプラットフォームで動作するソリューションの場合、 CanAccess JDBCドライバーとともに Jython または JayDeBeApi を使用することを検討してください。詳細については、関連する質問を参照してください

Python)でAccessデータベースを読み取ります

1
Gord Thompson

Bernieの応答に加えて、データベースのスキーマを回復できることを付け加えます。以下のコードはテーブルをリストしています(b [2]にはテーブルの名前が含まれています)。

con = pyodbc.connect('DRIVER={};DBQ={};PWD={}'.format(DRV,MDB,PWD))
cur = con.cursor()

tables = list(cur.tables())

print 'tables'
for b in tables:
    print b

以下のコードは、すべてのテーブルのすべての列をリストします。

colDesc = list(cur.columns())
1
mmicoski