Я пытаюсь выяснить способ создания программы, которая позволяет мне найти наилучшую комбинацию данных на основе нескольких разных факторов.
У меня есть файл 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-битную версии. У меня есть Microsoft Access Driver (*.mdb, *.accdb) в 64-битном, но не в 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()