15

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

クリーチャー データを含む 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 と "Driver の間にスペースを入れようとしましたが、それが何のためのものかわからなかったので、別のエラーが発生しました。

編集

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

編集

今働いています!

将来誰かに役立つ場合に備えて、私の最終的な作業コード。

# -*- 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()
4

1 に答える 1

13

次のデータを含む「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 ドライバー (*.mdb、*.accdb)」ドライバーを使用するには、コンピューターに Access データベース エンジン (別名「ACE」) をインストールする必要があることに注意してください。次のスクリプトを実行すると、Python が 32 ビットか 64 ビットかを確認できます。

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

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

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

于 2014-09-13T11:49:14.233 に答える