#python #sql #database
#python #sql #База данных
Вопрос:
Я хочу классифицировать некоторый текст. Поэтому я должен сравнить его с другими текстами. После представления текстов в виде векторов, как я могу сохранить их (очень большие списки значений с плавающей запятой) в базе данных SQL для последующего их использования?
Моя идея заключается в использовании модуля pickle:
vector=text_to_vector(text)
present=pickle.dumps(big_list)
some_db.save(text_id,present)
#later
present=some_db.get(text_id)
vector=pickle.loads(present)
Это быстро и эффективно, если у меня есть тысячи текстов?
Комментарии:
1. Ну, это зависит. Вам когда-нибудь понадобится запрашивать конкретный элемент по отдельности? Как правило, хранить сериализованные значения в базе данных — плохая идея.
2. ДА. Что еще, если не база данных?
Ответ №1:
Вы можете обнаружить, что pickle
и базы данных не слишком хорошо работают вместе.
Python pickle предназначен для сериализации объектов Python в формат, который затем может быть прочитан обратно в объекты Python с помощью Python. Хотя сериализовать его очень легко pickle
, вы не можете * запросить этот сериализованный формат, вы не можете * прочитать его в программе на другом языке. Проверьте cPickle, другой модуль Python, для ускорения pickle
.
Базы данных, с другой стороны, отлично подходят для сохранения данных таким образом, чтобы они были доступны для запросов и не зависели от языка. Но стоимость заключается в том, что обычно сложнее получать / помещать данные в / из базы данных. Вот почему существуют специальные инструменты, такие как SQL Alchemy, и бесконечные дебаты в блогах о преимуществах / ужасах программного обеспечения для сопоставления объектных отношений.
Pickle
редактирование объектов, а затем отправка их в базу данных, такую как MySQL или SQL Server, вероятно, не очень хорошая идея. Однако ознакомьтесь с shelve, другим модулем Python для сохранения объектов Python, подобных базе данных.
Итак, подводя итог:
- используйте
pickle
илиshelve
, если вам просто нужно сохранить данные для последующего использования программой Python - сопоставьте объекты с базой данных, если вы хотите сохранить данные для общего использования, понимая, что это требует больше усилий
- с точки зрения производительности,
cPickle
вероятно, выиграет сопоставление базы данных объекта / отношения
*: по крайней мере, не без больших усилий и / или специальных библиотек.