Python, сохранить диктант в базе данных - PullRequest
11 голосов
/ 21 мая 2010

Каков наилучший способ хранения и извлечения информации о питоне в базе данных?

Ответы [ 4 ]

15 голосов
/ 21 мая 2010

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

>>> 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']}
6 голосов
/ 21 мая 2010

«Лучший» спорен.
Если вам нужна СУБД, встроенный 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)]
4 голосов
/ 21 мая 2010

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

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

4 голосов
/ 21 мая 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...