首页 > 解决方案 > 烧瓶 sqlalchemy 和更新级联

问题描述

我用flask + sqlalchemy编写了一个库存应用程序,历史悠久,我有一个名为Bill的表,带有id,bill_id和bill_date,以及带有id,bill_number,位置的库存表。然后使用 queryselectfield 用户选择 bill_number,填写其他字段并将信息存储在数据库中。

但是如果我更新账单表中的账单编号,还需要库存表中的账单编号更新所有这些条目。

我尝试使用外键,创建一个 for 语句来更新所有条目,但没有任何效果。还有更新方法,但只适用于“static_values”,但使用变量时给了我一个字面错误。

class Bill(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    bill_number = db.Column(db.String(64), index=True, unique=True)
    bill_date = db.Column(db.Date, index=False, unique=False)

class Location(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    location_name = db.Column(db.String(64), index=True, unique=True)

class Inventory(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    serial_number = db.Column(db.String(64), index=True, unique=True)
    bill_number = db.Column(db.String(64), db.ForeignKey('bill.bill_number'))
    location = db.Column(db.String(64), db.ForeignKey('location.location_name'))

update = Inventory.query.filter(Inventory.bill_number==old_bill).update({ Inventory.bill_number : new_bill})

其中 old_bill 和 new_bill 来自一个表单,如果尝试使用:

Inventory.query.filter(Inventory.bill_number=='666').update({ Inventory.bill_number : '999'})

像魅力一样工作,但我需要使用表单中的值,而不是那些静态值。使用了外键,但不知道它们是否真的以我实现的方式工作。

甚至尝试过:

old = form.old.data
new = form.new.data
all = Inventory.query.filter_by(bill_number=old).all()
for i in all:
    i.bill_numer = new
db.session.commit() 

但不,不能更新整个库存表。

标签: pythonflaskflask-sqlalchemy

解决方案


推荐阅读