MicrosoftAccessデータベースのデータにアクセスしたい。 .accdbファイルと.mdbファイルがいくつかあり、Pythonでそれらを読みたいと思っています。
私の調査によると、pyodbcはWindowsプラットフォームでのみ使用できますが、Mac OSXで作業しています。Pythonは初めてです。
もう1つのオプションは、データベースからcsvにデータをエクスポートしてからPythonで使用できるかどうかです。
どんな助けや開始も大歓迎です。
「私の調査によると、pyodbcはWindowsプラットフォームでのみ使用できます」
違います。メイン pyodbcページ は言う
プリコンパイルされたバイナリホイールは、WindowsおよびmacOSのほとんどのPythonバージョンで提供されています。他のオペレーティングシステムでは、[pip installpyodbc]はソースからビルドされます。
ただし、ODBCを使用してAccessデータベースを操作することは主にWindowsで行われることは確かです。 "MDBツール「」は、「unixODBC」とともに、Windows以外のプラットフォームでAccessデータベースを操作する方法としてよく言及されますが、私の限られた経験では、実際にはうまく機能しないことがわかりました(まったく機能しない場合)。 。
もちろん、Windows以外のプラットフォーム用にサードパーティのMS Access ODBCドライバーをいつでも購入できますが、無料のオープンソースソリューションが必要な場合は、 CanAccess JDBCドライバー。これを実現するには、 JayDeBeApi と Jython の2つの方法があります。
どちらの場合も、UCanAccessの最新バージョン(ダウンロード可能 ここ )をダウンロードし、「bin.Zip」ファイルを便利な場所に解凍して、フォルダー構造を保持する必要があります。
(次の例では、~/Downloads/JDBC/UCanAccess
に解凍しました。)
これは、既存のPythonセットアップで機能するはずなので推奨されるオプションです。JayDeBeApiはpip
でインストールできます。現在(2019年7月)JPype1の新しいバージョンで問題が発生しているため、特定のバージョンをインストールする必要があります
pip install JPype1==0.6.3 JayDeBeApi==1.1.1
JRE(Javaランタイム環境)がまだインストールされていない場合は、それも必要になります。 (私はUbuntuでSudo apt install default-jre
を使用しました。)
必要なコンポーネントが配置されると、次のようなコードを使用できるようになります。
import jaydebeapi
db_path = "/home/gord/test.accdb"
ucanaccess_jars = [
"/home/gord/Downloads/JDBC/UCanAccess/ucanaccess-4.0.4.jar",
"/home/gord/Downloads/JDBC/UCanAccess/lib/commons-lang-2.6.jar",
"/home/gord/Downloads/JDBC/UCanAccess/lib/commons-logging-1.1.3.jar",
"/home/gord/Downloads/JDBC/UCanAccess/lib/hsqldb.jar",
"/home/gord/Downloads/JDBC/UCanAccess/lib/jackcess-2.1.11.jar",
]
classpath = ":".join(ucanaccess_jars)
cnxn = jaydebeapi.connect(
"net.ucanaccess.jdbc.UcanaccessDriver",
f"jdbc:ucanaccess://{db_path};newDatabaseVersion=V2010",
["", ""],
classpath
)
crsr = cnxn.cursor()
try:
crsr.execute("DROP TABLE table1")
cnxn.commit()
except jaydebeapi.DatabaseError as de:
if "user lacks privilege or object not found: TABLE1" in str(de):
pass
else:
raise
crsr.execute("CREATE TABLE table1 (id COUNTER PRIMARY KEY, fname TEXT(50))")
cnxn.commit()
crsr.execute("INSERT INTO table1 (fname) VALUES ('Gord')")
cnxn.commit()
crsr.execute("SELECT * FROM table1")
for row in crsr.fetchall():
print(row)
crsr.close()
cnxn.close()
(JythonはPythonの別個の実装であり、Python 2.7のみをサポートし、明らかに現在は活発に開発されていないことに注意してください。)
重要:以下の手順は、UCanAccessバージョン3.0.5以降用です。 。
後...
Sudo apt-get install jython
経由)、「dbTest.py」という名前の次のJythonスクリプトを作成しました
from com.ziclix.python.sql import zxJDBC
jdbc_url = "jdbc:ucanaccess:///home/gord/Documents/test.accdb"
username = ""
password = ""
driver_class = "net.ucanaccess.jdbc.UcanloadDriver"
cnxn = zxJDBC.connect(jdbc_url, username, password, driver_class)
crsr = cnxn.cursor()
crsr.execute("SELECT AgentName FROM Agents")
for row in crsr.fetchall():
print row[0]
crsr.close()
cnxn.close()
次のシェルスクリプトで実行しました
#!/bin/bash
export CLASSPATH=.:/home/gord/Downloads/JDBC/UCanAccess/loader/ucanload.jar
jython dbTest.py
MacOSxおよびUbuntu18.04では、 pandas_access を使用できます。
ドキュメントから:
import pandas_access as mdb
db_filename = 'my_db.mdb'
# Listing the tables.
for tbl in mdb.list_tables(db_filename):
print(tbl)
# Read a small table.
df = mdb.read_table(db_filename, "MyTable")
Ubuntuでは、以下を実行する必要がある場合があります。
Sudo apt install mdbtools
この質問は古いですが、ドキュメントには次のように書かれています。
インストールする最も簡単な方法は、pipを使用することです。 Windowsバイナリはダウンロードされますが、他のオペレーティングシステムはソースからコンパイルする必要があります。
だからそれは可能であるはずです。 Linuxマシンの例もあります。
http://mkleehammer.github.io/pyodbc/#connecting
しかし、ソースのこの部分をチェックしてください。
https://github.com/mkleehammer/pyodbc/blob/master/tests2/accesstests.py#L630,L636
これは、MSAccessファイルの接続文字列がどのように見えるかを示しています。