我正在尝试找出一种方法来创建一个程序,该程序允许我根据几个不同的因素找到最佳的数据组合。
我有一个包含生物数据的 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 位版本。我有 64 位的 Microsoft Access 驱动程序(*.mdb、*.accdb),但没有 32 位的。我正在使用 2013 版的 Microsoft Visual Studios。
编辑
现在工作!
我的最终工作代码以防将来对任何人有所帮助。
# -*- 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()