首页 > 解决方案 > Python SQLite3函数不打印任何数据

问题描述

我创建了一个函数,该函数应该将数据库中库存水平低于 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。我实际上得到了一个没有类似内容的数组:[]

标签: pythonsqlite

解决方案


product_qty被定义为TEXT列,因此<=将在操作数的字符串值之间进行比较。这可能不会给出您期望的结果:

>>> '8' < '10'
False

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

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)""")

推荐阅读