首页 > 解决方案 > 为什么我得到 peewee.OperationalError

问题描述

我正在尝试使用名为 Product 的表将“项目”、“价格”、“库存”和最终“日期”添加到我的 inventory.db 中。如何在不轰炸代码的情况下获取这些数据。由于我是这类东西的新手,请详细说明我做错了什么。

另外,我如何为每个单独的产品名称制作一个 ID?我一直在寻找,但我只是看不到我在寻找什么。

这是我正在使用的内容:https ://github.com/OXDavidXO/Python-Project-4/blob/main/app.py 。

这是搞砸的部分:

inventory = {
    'items': food_names,
    'price': food_price,
    'stock': food_stock,
    'dates': dates_added
}


def add_products():

    try:
        food_item = Product.create(product_names = inventory['items'])
        food_item.save()
    except IntegrityError:
        food_product = Product.get(product_names = inventory['items'])

标签: pythonpython-3.xsqliteormpeewee

解决方案


我猜你正在使用 Postgresql,虽然你没有提到什么 db. 当你进入一个糟糕的事务状态(例如通过捕获完整性错误)时,你需要回滚到一个好的状态才能继续。正确的做法是:

try:
    with db.atomic() as tx:
        food_item = Product.create(product_names = inventory['items'])
        # calling save() again is redundant, removed.
except IntegrityError as exc:
    food_item = Product.get(product_names = inventory['items'])

否则,请发布实际的回溯和错误消息。没有这些信息就很难调试。


推荐阅读