【问题标题】:How to fetch data from sqlite using python?如何使用 python 从 sqlite 获取数据?
【发布时间】:2019-03-19 19:13:45
【问题描述】:

我正在使用这个示例sqlite database,我的代码是

import sqlite3

conn=sqlite3.connect('chinook.db')
conn.execute("SELECT * FROM tracks")
rows= conn.cursor().fetchall()

for row in rows:
    print row

它应该可以工作,但没有输出?我在这里做错了什么?

【问题讨论】:

  • 你永远不会.execute()光标。
  • @Corion: conn.execute() 是一个快捷方式。但是,它确实会返回光标,这就是问题所在。
  • 什么是执行 cursor() 的正确方法。是conn.cursor().fetchall(); conn.execute()
  • @Eka:都在the documentation

标签: python python-2.7 sqlite


【解决方案1】:

Connection.execute shortcut 返回一个cursor 实例,您需要将其与fetchall 一起使用。在您的代码中,您正在创建一个新的独立光标。

因此:

from __future__ import print_function
import sqlite3

conn = sqlite3.connect('chinook.db')
cursor = conn.execute("SELECT * FROM tracks")
rows = cursor.fetchall()

for row in rows:
    print(row)

甚至更短(不推荐,但适合那些喜欢模糊单行线的人):

rows = sqlite3.connect('chinook.db').execute("SELECT * FROM tracks").fetchall()

或者不要使用Connection.execute快捷方式,以免混淆:

from __future__ import print_function
import sqlite3

conn = sqlite3.connect('chinook.db')
cursor = conn.cursor()
cursor.execute("SELECT * FROM tracks")
rows = cursor.fetchall()

for row in rows:
    print(row)

【讨论】:

  • 确实,OP 使用的是 Python 2,但您的代码在添加括号的两个版本中都可以完美运行。这是目前在 Google 上将 SQLite 与 Python 结合使用的最佳结果之一,因此大多数看到您的答案的人都在使用 Python 3。由于 OP 可能早已继续前进,请您重新考虑让答案同时适用于这两个版本吗?跨度>
猜你喜欢
  • 1970-01-01
  • 2020-09-09
  • 1970-01-01
  • 1970-01-01
  • 2018-01-30
  • 2018-03-30
  • 1970-01-01
  • 2015-11-29
  • 1970-01-01
相关资源
最近更新 更多