【问题标题】:Is there a better way to work with SQLite3 "SELECT" query results in Python3?有没有更好的方法来处理 Python3 中的 SQLite3“SELECT”查询结果?
【发布时间】:2018-02-07 00:18:37
【问题描述】:

当对我的 SQLite3 数据库进行“SELECT”查询时,我发现做一些简单的事情,比如进入数据库并获取一个值并让它看起来与我的程序中的一样分贝。我不够熟悉,不知道这是否就是这样,或者是否有更好的方法我应该做这些事情。

第一个元素是关于这样的事实:

player_name = c.execute("""SELECT name FROM players WHERE pid = ?""", (pid,))
print(player_name)

会产生这样的结果:

<sqlite3.Cursor object at 0x10c185110>

我发现提取实际内容的唯一方法是遍历结果光标并将内容存储在列表中:

player_name = []
sql = c.execute("""SELECT name FROM players WHERE pid = ?""", (pid,))
for result in sql:
    player_name.append(result)
    player_name = str(player_name).replace("[", "").replace("]", "")

另一个元素的问题较少,但我想我会把它扔在那里。事实上,我上面示例中的每个结果都是这样的:

 >>> print(player_name)
 ('Ben Johnson',)

最后,为了从数据库中获取确切的字符串并进入我的程序,我对每个查询都这样做:

>>> player_name = []
>>> sql = c.execute("""SELECT name FROM players WHERE pid = ?""", (pid,))
>>> for result in sql:
>>>     player_name.append(result)
>>>     player_name = str(player_name).replace("[", "").replace("]", "")
>>>     player_name = str(player_name).replace("('", "").replace("',)", "")
>>> 
>>> print(player_name)

Ben Johnson

【问题讨论】:

    标签: python-3.x select sqlite


    【解决方案1】:

    execute返回的游标对象包含行列表(实际上是按需计算);您确实应该使用 for 或类似的东西遍历光标。

    每一行都是一个包含所有列值的元组。要获取第一列,只需执行row[0]:

    for row in c.execute("SELECT SomeColumn FROM ..."):
        print(row[0])
    

    如果你想从单行获取单列值,可以写一个辅助函数:

    def query_single_value(db, query, *parameters):
        cursor = db.execute(query, parameters)
        for row in cursor:
            return row[0]
        else:
            return None  # not found
    
    print(query_single_value(c, "SELECT name FROM players WHERE pid = ?", pid))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-01
      • 2012-02-01
      相关资源
      最近更新 更多