如何将.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的开头删除“ r”。Driver= {Microsoft Access Driver(* .mdb,* .accdb)};“ 并尝试在r和“ Driver”之间加一个空格,因为我不知道它的用途,但是出现了另一个错误。

编辑

我按照建议检查了文件。我相信我正在运行64位。我检查了32位和64位版本。我在64位中有Microsoft Access驱动程序(* .mdb,*。accdb),但在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()
戈德·汤普森

假设您有一个名为“ Database1.accdb”的数据库文件,其中的表名为“ Creatures”,其中包含以下数据:

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”)。您可以通过运行以下脚本来检查您是否拥有32位或64位Python:

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

有了这些信息,您可以从此处下载并安装匹配的(32位或64位)版本的Access Database Engine。

Microsoft Access数据库引擎2010可再发行

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章