flask-sqlalchemy 中的多对多关系里面说到中间表的建立强烈不建议使用模型,为什么?

2015-04-19 14:33:42 +08:00
 no13bus
原文说的是:
http://docs.jinkan.org/docs/flask-sqlalchemy/models.html#id4
对于这个辅助表, 强烈建议 不 使用模型,而是采用一个实际的表

意思是不能这么写:
class Tokens(db.Model):
id = Column(db.Integer, primary_key=True)
page_id = Column(db.Integer, db.ForeignKey("page.id"))
tag_id = Column(db.Integer, db.ForeignKey("tag.id"))

为什么就不能用这种模型写法呢?
7367 次点击
所在节点    Python
8 条回复
9hills
2015-04-19 14:49:41 +08:00
如无必要,勿增实体。这个辅助表按理说是永远不会按照Model的用法用上的
no13bus
2015-04-19 16:06:13 +08:00
@9hills model的用法?奥。大概明白了。意思就是说这个表的操作用另外的表插入 读取,不大会有单独针对它本身的初始化和操作什么的。哎,说的有点绕口
9hills
2015-04-19 16:36:56 +08:00
@no13bus
hustlzp
2015-04-19 17:21:48 +08:00
额,原来还有这个建议。我之前一直是用Model来写的...
no13bus
2015-04-19 17:27:12 +08:00
@hustlzp 恩。其实我觉得如果你的中间表的model复杂的话,是不是说可以用model来写呢?既然建议的话,我就先这么写吧。
hustlzp
2015-04-19 17:41:57 +08:00
@no13bus 那个中文文档好像不是最新斑斑的,最新的是 2.0:

http://flask-sqlalchemy.pocoo.org/2.0/
hustlzp
2015-04-19 17:43:10 +08:00
@no13bus 打错了,最新版本。

不过最新版本也是有这个建议的。
oclock
2015-04-19 22:03:01 +08:00
如果这个many-to-many关系中没有其它信息需要维护,tag和page直接引用到对方(e.g. tag.related_pages, page.related_tags),因为不需要显示地对token做操作,也就没有必要为它创建class/model (想像这些model的下游码农不是你自己,那他应该不需要知道token table的存在)

否则,假设token记录了譬如created_at这样的额外信息,三张表的关联变成 tag <-> token <-> page,为了取得created_at就绕不开token,因此需要把token table暴露出来

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/184723

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX