在 Python 中输出 sqlite 记录



我目前正在制作一个库存管理系统。到目前为止,所有代码都有效,但是我有一个变量,它要求用户输入成分名称。如果在我创建的数据库的"库存"表中找到成分名称,则记录将显示给用户。在每条记录中,都有字段:成分、stock_level、价格和零售商。我不确定如何将整个记录输出给用户。

我尝试使用 print(fetchone()),但是如果一种成分保存在数据库中,则输出"无"而不是实际记录

def searchIngredient():
found=0
while found == 0:
ingredient = input("Enter an ingredient name: ")
if len(ingredient) < 3:
print("Ingredient name must be three or more characters long")
continue
with sqlite3.connect("Inventory.db") as db:
cursor = db.cursor()
findIngredient = ("SELECT * FROM Inventory WHERE Ingredient=?")
cursor.execute(findIngredient, [(ingredient)])
if cursor.fetchall():
print(fetchone())
else:
found = 0
print("Ingredient does not exist in Inventory")
tryAgain = input("Do you want to enter another Retailer? Y or N ")
if tryAgain.lower() == "n":
mainMenu()
time.sleep(2)
mainMenu() 

当使用其余代码运行时,会要求用户输入成分名称(如果字符串少于三个字符,则格式检查有效)。使用 fetchone() 函数,当输入数据库中存在的成分名称时,将输出"None"。如果成分不存在,则代码也有效。这只是将记录输出给用户的情况。

您不是在获取记录,而是:

# returns a list
for rec in cursor.fetchall():
# do something
# or
while True:
rec = cursor.fetchone()
if not rec:
break
# do something

由于获取所有记录可能会导致列表非常大,因此建议循环访问记录,直到您遇到None- 不再阅读。查看文档以获取更多信息。


此外,Python有一个标准的lib日志记录。您不必打印。

例:

logger = logging.getLogger("SQL query")
logger.setLevel(logging.DEBUG)
logger.info("QUERY: %s" % query)

您可以将其保存到文件中:

hdlr = logging.FileHandler('query.log')
logger.addHandler(hdlr) 

有关更多示例,请参阅说明书。

最新更新