【问题标题】:Store database query result in an object in Python 3在 Python 3 中将数据库查询结果存储在对象中
【发布时间】:2016-08-10 09:28:15
【问题描述】:

在我的 python 应用程序中,我运行一个查询,它从我的产品表中返回一个 product。当我得到结果并将其分配到变量中时,它存储在 list 中。但我想创建一个产品类,并希望将查询结果存储在与我的数据库表匹配的产品类对象中。

但我不想这样做,即从列表中逐个获取值并设置对象变量等等。

我想这样做是因为我的数据库表很大并且列表不存储变量的字段名称。它就像以下一样;所以我不能使用这样的东西; getProductName()

[5,"strawberry",011023234,10.5]

所以我应该记住我的产品条形码在需要时存储在哪个位置。

从数据库中检索数据;

vt = sqlite3.connect("vt.sqlite")
im = vt.cursor()
im.execute("SELECT * FROM Products WHERE barcode='{}'".format(barcode))
veriler = im.fetchall()

这里是veriler = [5,"starberry",001]

我的数据库表会很大。那么我的验证器将是一个很长的列表。

当我想获取检索数据的某些属性时,我必须像 veriler[0]、veriler[25] 等访问它。我应该记住每个属性的索引。

如果我的产品类在我的数据库表中具有所有属性并创建一个产品对象,并且当我将数据库结果分配给我的产品对象时,我已经在产品对象中设置了所有属性并且可以访问我的产品的属性,是否有可能?使用 get 方法的对象。

提前致谢。

【问题讨论】:

  • 请包含您用于从数据库中检索数据的代码。您能否更准确地了解预期结果是什么?
  • 听起来你可能想要ORM
  • 这真的很好,但似乎 ORM 比我想要的要多。我只需要将结果简单地转换为对象。
  • 一般来说,为了这样的目的,我推荐使用 ORM。最受欢迎的是 SQLAlchemy,但如果你需要一些小而易于使用的东西,你可以考虑 peewee。当您需要在 python 中使用数据库时,它非常有用。

标签: python database sqlite python-3.x


【解决方案1】:

pscycopg2 NamedTupleCursor 为数据库结果提供对象。

【讨论】:

    【解决方案2】:

    好的,我想通过更多搜索找到了如何做到这一点。

    不确定这是最好的方法,但它对我有用。

    Convert database result into jsonconvert json to python object.

    【讨论】:

      【解决方案3】:

      sqlite3 有一个内置方法可以做到这一点:

      https://docs.python.org/3.8/library/sqlite3.html#sqlite3.Row

      Row 实例用作连接对象的高度优化的 row_factory。它试图在大部分特征中模仿元组。

      它支持通过列名和索引、迭代、表示、相等测试和len()进行映射访问。

      如果两个 Row 对象具有完全相同的列并且它们的成员相等,则它们比较相等。

      键()

      此方法返回列名列表。在查询之后,它是 Cursor.description 中每个元组的第一个成员。

      所以在你的情况下:

      
      vt = sqlite3.connect("vt.sqlite")
      vt.row_factory = sqlite3.Row
      

      或者您可以自己构建:

      https://docs.python.org/3.8/library/sqlite3.html#connection-objects

      行工厂

      您可以将此属性更改为接受游标和原始行作为元组并返回实际结果行的可调用对象。这样,您可以实现更高级的返回结果方式,例如返回一个也可以按名称访问列的对象。

      Example:
      
      import sqlite3
      
      def dict_factory(cursor, row):
          d = {}
          for idx, col in enumerate(cursor.description):
              d[col[0]] = row[idx]
          return d
      
      con = sqlite3.connect(":memory:")
      con.row_factory = dict_factory
      cur = con.cursor()
      cur.execute("select 1 as a")
      print(cur.fetchone()["a"])
      
      con.close()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-31
        • 1970-01-01
        • 2021-11-09
        • 1970-01-01
        • 2012-06-12
        • 2023-03-17
        • 1970-01-01
        • 2013-11-20
        相关资源
        最近更新 更多