【问题标题】:Python add items into dictionary from database table (sqlite3)Python将项目从数据库表(sqlite3)添加到字典中
【发布时间】:2021-11-27 10:31:12
【问题描述】:

我创建了一个名为 fruits 的数据库表,它有 3 列,id(int primary key)、fruits(text) 和 weight(float)。

id fruit weight
1 Apple 80.5
2 Pear 150.8
3 Kiwi 69

如何创建字典并将所有水果和重量作为键值对添加到字典中?

import sqlite3

conn = sqlite3.connect("database.db")

sql = """SELECT fruit,weight FROM fruits"""

cursor = conn.execute(sql)
data = cursor.fetchall()

fruitweight= {}
i = 0

while(i < len(data)):
    fruitweight['<fruitname>'] = <fruitweight>
    i = i+1

【问题讨论】:

    标签: python sql database sqlite dictionary


    【解决方案1】:

    你可以这样做:

    import sqlite3
    
    with sqlite3.connect('/Users/andy/andy') as conn:
        cursor = conn.execute('select fruit, weight from fruits')
        D = dict()
        for row in cursor.fetchall():
            D[row[0]] = row[1]
        print(D)
    

    【讨论】:

      【解决方案2】:

      类似这样的:

      for row in data:
          name, weight = row
          fruitweight[name] = weight
      

      fetchall() 根据您的查询从数据库中返回值的元组列表。上面将元组解包成两个变量。

      如果你想变得花哨,你可以使用带有元组解包的字典推导:

      fruitweight = {name: weight for name, weight in data}
      

      最后,execute() 实际上返回了一个您可以迭代的游标,所以我认为您的代码可以简化为以下内容:

      import sqlite3
      
      conn = sqlite3.connect("database.db")
      
      sql = """SELECT fruit,weight FROM fruits"""
      fruitweight = {name: weight for name, weight in conn.execute(sql)}
      
      

      【讨论】:

      • 感谢@Jussi Nurminen 的快速回答。我不知道您可以只使用“名称,重量=行”。这是一种字符串操作吗?
      • 不,这叫做“元组解包”。它将一个元组拆分为几个单独的变量。
      • 具体来说,nameweight 只是变量名。这相当于name = row[0]; weight=row[1]
      【解决方案3】:

      我不认为光标是正确的,但是 你应该使用 for 循环:

      import sqlite3
      
      conn = sqlite3.connect("database.db")
      cur = conn.cursor()
      
      sql = """SELECT fruit,weight FROM fruits"""
      
      cur.execute(sql)
      data = cur.fetchall()
      
      
      fruitweight= {}
      
      for i in data:
          fruitweight[i[0]] = i[1]
      
      conn.close()
      
      print(fruitweight)
      

      【讨论】:

      • 为什么需要提交?
      • 感谢您提醒我。
      猜你喜欢
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多