web-dev-qa-db-ja.com

.accdbファイルをPythonにインポートしてデータを使用するにはどうすればよいですか?

いくつかの異なる要因に基づいてデータの最適な組み合わせを見つけることができるプログラムを作成する方法を見つけようとしています。

生き物データが入ったMicrosoft Accessファイルがあります。攻撃、防御、健康、使用に必要な戦闘スキル、その他のいくつかの情報。

この.accdb(Access 2013)ファイルをインポートして、保存されているデータにアクセスできるようにしようとしています。

すべてのデータをスキャンしてすべての可能な組み合わせ(5つのクリーチャーのセット)を実行して、必要なさまざまなバトルスキル(たとえば、100のバトルスキルにはクリーチャー1、2を使用する)の最も強力な組み合わせを見つけるプログラムを作ってみます3、4、5(125の戦闘スキルはクリーチャー3、5、6、8、10を使用)

最初に助けが必要な主なことは、簡単にアクセスできるようにデータベースをインポートできることです。したがって、pythonでデータを再作成する必要がなく、同じプログラムを新しいアクセスに使用できます将来のデータベース。

https://code.google.com/p/pypyodbc/ をインストールしましたが、既存のファイルをロードする方法を理解できないようです。

編集する

私は自分の情報に合わせて修正されたGordの回答のコードを使用しようとしました。

# -*- coding: utf-8 -*-
import pypyodbc
pypyodbc.lowercase = False
conn = pypyodbc.connect(
    r"Driver={Microsoft Access Driver (*.mdb, *.accdb)};" +
    r"Dbq=C:\Users\Ju\Desktop\Dark Summoner.accdb;")
cur = conn.cursor()
cur.execute("SELECT Number, Name, Atk, Def, HP, BP, Species, Special FROM Impulse AA+");
while True:
    row = cur.fetchone()
    if row is None:
        break
    print (u"Creature with Number {1} is {1} ({2})".format(
        row.get("CreatureID"), row.get("Name_EN"), row.get("Name_JP")))
cur.close()
conn.close()

その周りに()が追加されているため、印刷行でエラーが発生していました。

過去に発生していたのと同様のエラーが発生します。

Traceback (most recent call last):
  File "C:\Users\Ju\Desktop\Test.py", line 6, in <module>
    r"Dbq=C:\Users\Ju\Desktop\Dark Summoner.accdb;")
  File "C:\Python34\lib\site-packages\pypyodbc-1.3.3-py3.4.Egg\pypyodbc.py", line 2434, in __init__
    self.connect(connectString, autocommit, ansi, timeout, unicode_results, readonly)
  File "C:\Python34\lib\site-packages\pypyodbc-1.3.3-py3.4.Egg\pypyodbc.py", line 2483, in connect
    check_success(self, ret)
  File "C:\Python34\lib\site-packages\pypyodbc-1.3.3-py3.4.Egg\pypyodbc.py", line 988, in check_success
    ctrl_err(SQL_HANDLE_DBC, ODBC_obj.dbc_h, ret, ODBC_obj.ansi)
  File "C:\Python34\lib\site-packages\pypyodbc-1.3.3-py3.4.Egg\pypyodbc.py", line 964, in ctrl_err
    raise Error(state,err_text)
pypyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified')

エラーコードに記載されている行でpypyodbc.pyファイルを調べましたが、理解できませんでした。 r "Driver = {Microsoft Access Driver(* .mdb、* .accdb)};"の先頭から "r"を削除しようとしましたrと「ドライバー」の間にスペースを入れてみましたが、何の目的かわからなかったため、別のエラーが発生しました。

編集する

提案どおりにファイルを確認しました。私は64ビットを実行していると思います。 32ビット版と64ビット版の両方をチェックしました。 Microsoft Access Driver(* .mdb、*。accdb)を64ビットで使用していますが、32ビットでは使用していません。 Microsoft Visual Studiosの2013バージョンを使用しています。

編集する

今働いています!

それが将来誰かを助ける場合に備えて、私の最終的な作業コード。

# -*- coding: utf-8 -*-
import pypyodbc
pypyodbc.lowercase = False
conn = pypyodbc.connect(
    r"Driver={Microsoft Access Driver (*.mdb, *.accdb)};" +
    r"Dbq=C:\Users\Ju\Desktop\Dark Summoner.accdb;")
cur = conn.cursor()
cur.execute("SELECT Number, ID, Name, Atk, Def, HP, BP, Species, Special FROM Impulse_AA");
while True:
    row = cur.fetchone()
    if row is None:
        break
    print (u"ID: {1} {2} Atk:{3} Def:{4} HP:{5} BP:{6} Species: {7} {8}".format(
        row.get("Number"), row.get("ID"), row.get("Name"), row.get("Atk"),
        row.get("Def"), row.get("HP"), row.get("BP"), row.get("Species"), row.get("Special") ))
cur.close()
conn.close()
15
Justin

次のデータを含む「Creatures」という名前のテーブルを含む「Database1.accdb」という名前のデータベースファイルがあるとします。

CreatureID  Name_EN   Name_JP
----------  --------  -------
         1  Godzilla  ゴジラ
         2  Mothra    モスラ

Windowsマシンでpypyodbcを介してデータを読み取るミニマリストのPythonスクリプトは、次のようになります。

# -*- coding: utf-8 -*-
import pypyodbc
pypyodbc.lowercase = False
conn = pypyodbc.connect(
    r"Driver={Microsoft Access Driver (*.mdb, *.accdb)};" +
    r"Dbq=C:\Users\Public\Database1.accdb;")
cur = conn.cursor()
cur.execute("SELECT CreatureID, Name_EN, Name_JP FROM Creatures");
while True:
    row = cur.fetchone()
    if row is None:
        break
    print(u"Creature with ID {0} is {1} ({2})".format(
        row.get("CreatureID"), row.get("Name_EN"), row.get("Name_JP")))
cur.close()
conn.close()

結果の出力は

Creature with ID 1 is Godzilla (ゴジラ)
Creature with ID 2 is Mothra (モスラ)

編集

「Microsoft Access Driver(* .mdb、* .accdb)」ドライバーを使用するには、Access Database Engine(別名「ACE」)がマシンにインストールされている必要があります。次のスクリプトを実行して、32ビットまたは64ビットのどちらであるかを確認できますPython

import struct
print("running as {0}-bit".format(struct.calcsize("P") * 8))

その情報を利用して、一致する(32ビットまたは64ビット)バージョンのAccessデータベースエンジンをここからダウンロードしてインストールできます。

Microsoft Accessデータベースエンジン2010再頒布可能

12
Gord Thompson