如何将.accdb文件导入Python并使用数据?

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()

在print语句周围添加了(),以解决错误。

现在我遇到了类似于之前的错误。

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 Driver(*.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()

(1) 你的Python版本是32位还是64位? (2) 运行 %SystemRoot%\SysWOW64\odbcad32.exe。在“驱动程序”选项卡上,你是否看到“Microsoft Access Driver (*.mdb, *.accdb)”? - Gord Thompson
我已经更新了我的回答。 - Gord Thompson
1
你好,感谢分享这个。在32位Linux中如何访问.accdb文件?我已经按照这里建议的安装了tdsodbc unixodbc包:https://code.google.com/archive/p/pypyodbc/wikis/Linux_ODBC_in_3_steps.wiki 但是我找到的解决方案都是连接到某个服务器。我只想读取一个.accdb文件! - Nikhil VJ
1个回答

13

假设您有一个名为“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 Driver(*.mdb,*.accdb)”驱动程序需要在您的计算机上安装Access数据库引擎(又称“ACE”)。您可以通过运行以下脚本来检查您是否拥有32位或64位的Python:

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

掌握了这些信息后,您可以从此处下载并安装匹配的 (32 位或 64 位) 版本的 Access 数据库引擎。

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


太棒了!现在可以工作了,非常感谢! - Justin
对我来说,当连接字符串中等号之前或之后有空格时,这个方法就无法正常工作。 - Chad Skeeters
感谢这些指示。我正在使用Windows 10(最新的Cygwin),已安装Python 3.6和您提供的可再发行程序包。它显示“pypyodbc.OdbcNoLibrary:未找到ODBC库。是否设置了LD_LIBRARY_PATH?”不确定要将其设置为哪个路径。 - dfrankow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接