【发布时间】:2018-04-17 07:27:09
【问题描述】:
我是 SQLAlchemy 的新手,我正在尝试使用 Flask-RESTful 和 Flask-SQLAlchemy 创建一个新项目,其中包含几个子项目(简单的一对多关系)的列表。我正在尝试同时创建项目和子项目,但我不清楚 SQLAlchemy 应该如何工作。
class ItemModel(Model):
__tablename__ = 'items'
id = Column(Integer, primary_key=True)
name = Column(String(80))
sub_items = relationship('SubItemModel')
class SubItemModel(db.Model):
__tablename__ = 'sub_items'
id = Column(Integer, primary_key=True)
item_id = Column(Integer, ForeignKey('items.id'))
name = Column(String(80))
item = relationship('ItemModel')
我想添加一个item 和几个sub_items(通过 POST 路由),但是我无法弄清楚首先要创建哪些对象以及 SQLAlchemy 会自动执行多少操作。我通过创建一个没有sub_items 的item,创建sub_items,然后用sub_items 重新保存item,得到了一些工作。但这似乎很笨拙,尤其是在item 或某些sub_items 可能已经存在的情况下。
我的直觉就是做这样的事情:
item = ItemModel(
name="item1",
sub_items=[{name: "subitem1"},{name: "subitem2"}])
session.add(self)
session.commit()
但它不起作用(我收到关于不可散列类型的错误),而且它似乎......太简单了,不知何故。就像我应该单独定义 sub_item 对象一样。但由于它们依赖于 item_id,我不知道该怎么做。
我确信这个问题之前已经回答过,或者在某个简单的教程中解释过,但是我找不到足够简单的东西让我理解。我希望有人可以引导我了解基础知识。 (哪些部分应该是神奇的,哪些部分我仍然需要手动编码......)
谢谢。
【问题讨论】:
标签: python sqlalchemy flask-sqlalchemy flask-restful