Python, сохраните файл dict в базе данных

Какой лучший способ хранить и извлекать питон python в базе данных?

Ответ 1

Если вы не заинтересованы в использовании традиционной базы данных SQL, такой как MySQL, вы можете посмотреть в неструктурированные базы данных документов, где документы, естественно, сопоставляются с словарями python, например MongoDB. MongoDB привязки python позволяют просто вставлять dicts в БД и запрашивать их на основе значений в dict. См., Например, следующий код из tutorial:

>>> from pymongo import Connection
>>> connection = Connection()
>>> db = connection['test-database']
>>> import datetime
>>> post = {"author": "Mike",
...         "text": "My first blog post!",
...         "tags": ["mongodb", "python", "pymongo"],
...         "date": datetime.datetime.utcnow()}
>>> posts = db.posts
>>> posts.insert(post)
ObjectId('...')
>>> posts.find_one({"author": "Mike"})
{u'date': datetime.datetime(...), u'text': u'My first blog post!', u'_id': ObjectId('...'), u'author': u'Mike', u'tags': [u'mongodb', u'python', u'pymongo']}

Ответ 2

"Лучший" спорный.
Если вам нужна СУБД, встроен sqlite; поэтому его можно считать более простым методом, чем некоторые другие упомянутые способы.

import sqlite3
conn = sqlite3.connect(':memory:')
c = conn.cursor()
c.execute("create table kv (key text, value integer);")
# <sqlite3.Cursor object at 0x00C62CE0>
d = {'a':1,'b':2}
c.executemany("insert into kv values (?,?);", d.iteritems())
# <sqlite3.Cursor object at 0x00C62CE0>
c.execute("select * from kv;").fetchall()
# [(u'a', 1), (u'b', 2)]

Ответ 3

Довольно неопределенный вопрос, сильно зависит от вариантов использования.

Обычно вы просто сериализуете его и вставляете туда, где это необходимо, но если вам нужно, чтобы сам dict был "подобен базе данных", вы можете использовать один из многие доступные хранилища ключей/значений для Python

Ответ 4

Если dict напрямую соответствует таблице базы данных, тогда вы должны настроить таблицу со схемой, содержащей два столбца - key и value. Затем для каждого элемента dict просто вставьте его в базу данных или обновите его, если ключ уже на месте и т.д.

В противном случае вы можете использовать pickle для сериализации dict в строке, а затем вы можете просто сохранить строку в БД. Но в целом я бы не рекомендовал это решение, так как вы не можете запросить сериализованные данные.