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

Что лучший способ состоит в том, чтобы сохранить и получить Python dict в базе данных?

11
задан ensnare 20 May 2010 в 20:07
поделиться

4 ответа

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

>>> 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']}
16
ответ дан 3 December 2019 в 02:52
поделиться

Довольно расплывчатый вопрос, во многом зависит от вариантов использования.

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

4
ответ дан 3 December 2019 в 02:52
поделиться

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

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

4
ответ дан 3 December 2019 в 02:52
поделиться

«Лучшее» спорно.
Если вам нужна СУБД, 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)]
6
ответ дан 3 December 2019 в 02:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: