python - Flask SQLAlchemy 仅更新 2 个模型之间的链接
问题描述
我在 python 3.7 中使用 Flask、SQLAlchemy、Marshmallow 开发了一个 API。我尝试通过表格链接修改与许多功能相关的这个对象“项目”,反之亦然。
{
"id": "0fef2a90-f468-4e8e-827d-3d1804cb3ad5",
"name": "item 1",
"functions": [],
}
我想在第 1 项中添加一个现有功能:
{
"id": "0fef2a90-f468-4e8e-827d-3d1804cb3ad5",
"name": "item 1",
"functions": [{
"id": "35f56892-2154-4f11-8af5-6a13b1456fc4",
"name": "function 1"
}],
}
这是我的模型和模式的代码:
class ItemModel(db.Model):
__tablename__ = 'item'
id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, unique=True, nullable=False)
name = db.Column(db.Text, unique=True, nullable=False)
functions = db.relationship('FunctionModel', secondary='link_item_function', uselist=True)
class FunctionModel(db.Model):
__tablename__ = 'function'
id = db.Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, unique=True, nullable=False)
name = db.Column(db.Text, unique=True, nullable=False)
description = db.Column(db.Text)
items = db.relationship('ItemModel', secondary='link_item_function', uselist=True)
class LinkItemFunctionModel(db.Model):
__tablename__ = 'link_item_function'
function_id = db.Column(UUID(as_uuid=True), db.ForeignKey('function.id', ondelete='CASCADE'))
item_id = db.Column(UUID(as_uuid=True), db.ForeignKey('item.id', ondelete='CASCADE'))
link_item_function_pkey = db.PrimaryKeyConstraint(function_id, item_id)
from ma import ma
class FunctionSchema(ma.SQLAlchemyAutoSchema):
items = ma.Nested('ItemSchema', many=True, exclude=('functions',))
class Meta:
model = FunctionModel
load_instance = True
transient = True
class ItemSchema(ma.SQLAlchemyAutoSchema):
functions = ma.Nested('FunctionSchema', many=True, exclude=('items',))
class Meta:
model = ItemModel
load_instance = True
当我这样做时,我的 API 会尝试创建函数,但我只想在表“link_item_function”中创建链接,而不是函数。如果该函数不存在,则返回错误。我到处寻找,但没有成功。有没有好的方法来做到这一点?我想在 SQLAlchemy 包中直接有这个解决方案。
提前感谢您的帮助!
解决方案
推荐阅读
- google-bigquery - Unnest 的 BigQuery 聚合问题
- java - android系统托盘中的通知,不起作用
- flutter - 自动完成 text_field 建议未在颤动中显示。出现错误在 null 上调用了方法“调用”。接收者:null 尝试调用:call()
- python - 如何清理未格式化的价格并获得范围内的最小价格?
- angularjs - Adal angularjs - Azure 活动目录:从 URL/查询字符串中隐藏 id_token
- git - 如何在 IntelliJ 的终端中提交 git 消息?
- c - 在 C 中为浮点分配的内存大小
- python - 在 exec 内置函数中使用 return 语句是否合法?
- processing - 处理:将绘图循环运行到一个独立的线程中
- android - 从android中的另一个应用程序共享时如何检索链接?