【问题标题】:Python, store a dict in a databasePython,将字典存储在数据库中
【发布时间】:2011-02-22 01:46:39
【问题描述】:

在数据库中存储和检索 python dict 的最佳方法是什么?

【问题讨论】:

    标签: python string dictionary


    【解决方案1】:

    如果您对使用传统的 SQL 数据库(例如 MySQL)不是特别感兴趣,您可以查看文档自然映射到 Python 字典的非结构化文档数据库,例如 MongoDB。 MongoDB python bindings 允许您在数据库中插入字典,并根据字典中的值查询它们。例如下面的代码:

    import pymongo
    myclient = pymongo.MongoClient("mongodb://localhost:27017/")
    mydb=myclient["mydatabase"]
    mycol = mydb["customers"]
    mydict = { "name": "John", "address": "Highway 37" }
    x = mycol.insert_one(mydict)
    

    并找到条目:

    print(mycol.find_one({"name":"John"}))
    

    【讨论】:

    • 嘿,是的,这很酷;)。我最近开始使用 MongoDB,它非常好,因为它的文档模型基于二进制 JSON。由于我在这里听起来像是广告,甚至还有免费的在线托管服务(免费为 16MB):mongohq.com/home :p
    • mongo 最多存储一个深度为 100 的字典
    【解决方案2】:

    如果dict直接对应一个数据库表,那么你应该建立一个表,其模式包含两列-keyvalue。然后对于 dict 的每个元素,只需将其插入数据库,或者如果密钥已经到位,则更新它等。

    否则您可以使用pickle 将字典序列化为字符串,然后您可以将字符串保存到数据库中。但总的来说,我不会推荐这种解决方案,因为您无法查询序列化数据。

    【讨论】:

      【解决方案3】:

      “最佳”值得商榷。
      如果你需要一个 DBMS,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】:

        相当模糊的问题,很大程度上取决于用例。

        通常您只需将其序列化并将其插入任何需要的地方,但如果您需要 dict 本身“类似于数据库”,那么您可以使用 many of the available key/value stores for Python 之一

        【讨论】:

          猜你喜欢
          • 2013-05-06
          • 1970-01-01
          • 1970-01-01
          • 2015-11-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多