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

 于志军贵冰卿 发布于 2022-12-21 15:21

我试图找到一种方法来创建一个程序,使我能够根据几个不同的因素找到最佳的数据组合.

我有一个包含生物数据的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 
    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位版本.我有64位但不是32位的Microsoft Access驱动程序(*.mdb,*.accdb).我正在使用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()

Gord Thompso.. 12

假设您有一个名为"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))

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

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

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有