Python SQLite3函数不打印任何数据

时间:2019-02-16 13:38:35

标签: python sqlite

我创建了一个函数,该函数应该将数据库中所有库存水平小于10的项目发送到文本文件。但是当我按下重新排序按钮时,我没有收到任何数据。

def Database():
    global conn, cursor
    conn = sqlite3.connect("main_storage.db")
    cursor = conn.cursor()
    cursor.execute("CREATE TABLE IF NOT EXISTS `admin` (admin_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, username TEXT, password TEXT)")
    cursor.execute("CREATE TABLE IF NOT EXISTS `product` (product_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, product_name TEXT, product_qty TEXT, product_price TEXT)")
    cursor.execute("CREATE TABLE IF NOT EXISTS `basket` (product_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, product_name TEXT, product_qty TEXT, product_price TEXT)")
    cursor.execute("SELECT * FROM `admin` WHERE `username` = 'admin' AND `password` = 'admin'")
    if cursor.fetchone() is None:
        cursor.execute("INSERT INTO `admin` (username, password) VALUES('admin', 'admin')")
        conn.commit()

def reorder():
    global items
    Database()
    cursor.execute("SELECT `product_name` FROM `product` WHERE `product_qty` <= 10")
    items = cursor.fetchall()
    print(items)
    cursor.close()
    conn.close()

我希望输出是数据库中项目的数组,例如[44,'motherboard',9,80]其中44是product_id,母板是product_name,9是product_stock,80是product_price。我实际上得到的数组什么都不是:[]

1 个答案:

答案 0 :(得分:2)

product_qty被定义为 TEXT 列,因此将在操作数的 string 值之间进行类似<=的比较。这可能无法提供您期望的结果:

>>> '8' < '10'
False

使用 INTEGER REAL 作为数值的列类型重新创建表,以获取所需的行为。例如:

cursor.execute("""CREATE TABLE IF NOT EXISTS `product` """
               """(product_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,"""
               """product_name TEXT, product_qty INTEGER, product_price REAL)""")