python - 烧瓶 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()
但不,不能更新整个库存表。
解决方案
推荐阅读
- python - 计算长度为 5 且恰好有两个重复数字的数字的数量
- java - 无法从字符串“2020-12-18 16:04:07-06”反序列化“java.time.LocalDateTime”类型的值
- wordpress - 根据序列化的元值获取帖子
- javascript - 手动导航 vue-router 路由时 Vuex 疼痛丢失
- java - 使用具有相对路径的 Sping 位置属性加载外部属性
- javascript - 如果 img src 的值被 JS 单击事件更改,为什么当使用后退按钮重新访问包含它的页面时,该值不开始为空?
- woocommerce - WooCommerce 挂钩 - woocommerce_after_cart_item_name
- java - 具有自定义宽度和高度的 PdfBoxRenderer
- javascript - 如何在带有 v-for 指令的组件内使用三元运算符?
- python-3.x - Selenium python webscraper - 如何仅选择网页列表中更改的第一个文档?