如何返回数据库中的所有行

时间:2019-04-03 20:13:44

标签: database python-3.x sqlite

我需要在python中创建一个函数,该函数返回sqllite数据库中的所有行。

我已经创建了此函数,但它仅返回表的第一行。

import sqlite3
def data_provider():
    conn = sqlite3.connect('MainDatabase.db')
    cur = conn.cursor()
    sqlstr = 'SELECT * FROM Products_table'
    for row in cur.execute(sqlstr):
        return row
print(data_provider())

1 个答案:

答案 0 :(得分:2)

您只会返回一行,因为您的代码实际上返回了行生成器的第一个结果:

import sqlite3
def data_provider():
    conn = sqlite3.connect('MainDatabase.db')
    cur = conn.cursor()
    sqlstr = 'SELECT * FROM Products_table'
    for row in cur.execute(sqlstr):
        return row                     # <- This is the one row you're returning because 'return' is causing execution to leave the loop
print(data_provider())

如果要将所有行作为Python列表返回,则可以在光标上使用fetchall()方法,如下所示:

import sqlite3
def data_provider():
    conn = sqlite3.connect('MainDatabase.db')
    cur = conn.cursor()
    sqlstr = 'SELECT * FROM Products_table'
    cur.execute(sqlstr)
    return cur.fetchall()
print(data_provider())