В настоящее время я подключаюсь к удаленной базе данных и запрашиваю длинный список элементов. Я не знаю, сколько всего элементов в базе данных, но я запрашивал около 3000 элементов, которые соответствуют различным параметрам, которые я ищу. Как только я получаю идентификатор элемента, который мне нужен, я затем запрашиваю базу данных для получения информации о каждом элементе, типы ниже:
[str, str, datetime, str, str, int, int, int, str, str, bool]
Проблема в том, что запрос всей этой информации занимает почти 45 минут, потому что база данных чрезвычайно велика. Чтобы решить эту проблему, я пытаюсь выбрать список, чтобы я мог пока пропустить шаг запроса, пока я пытаюсь протестировать и отладить остальные 90% моего кода. Большая часть остального моего кода выполняет операции с этим списком, но мне нужен список для проверки этих операций.
Я считаю, что можно просто напечатать каждое поле элемента, а затем вернуть его обратно в мой основной список, но это кажется действительно неэффективным. Ниже приведен код, связанный со сбором/маринованием, а также пример операции, которую мне нужно выполнить.
query_object = QueryObject()
item_ids = query_object.get_ids()
print("\nFinished collecting the ID's for", len(item_ids), "items.")
answer = input("Do you wish to load information from the disk or the database? (d = disk, i = database)\n")
if answer == "d":
file = open('item_information.txt', 'rb')
items_list = pickle.load(file)
# pickle loads everything in as a string, so currently I just manually cast each item in the list
for item in items_list:
item = [str(item[0]), str(item[1]), str(item[2]), str(item[3]), int(item[4]), int(item[5]), int(item[6]),
int(item[7]), str(item[8]), str(item[9]), bool(item[10])]
file.close()
elif answer == "i":
file = open('item_information.txt', 'wb')
items_list = query_object.gather_item_list_data(item_ids)
pickle.dump(items_list, file)
file.close()
else:
print("Bad input.", answer)
sys.exit(1)
# remove all items that aren't usable
items_list[:] = [item for item in items_list if item[9] is True]
Есть ли способ заставить Pickle сбросить формат списка, чтобы когда я pickle.load()
я набирал свой список так же, как когда я pickle.dump()
его редактировал?
Если pickle загружает все как строку, это потому, что вы сохранили все как строку. Просто не делай этого. Обратите внимание, что ваш цикл for не изменяет загружаемый вами список...