V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
no13bus
V2EX  ›  Python

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

  •  
  •   no13bus ·
    no13bus · 2015-04-19 14:33:42 +08:00 · 7378 次点击
    这是一个创建于 3536 天前的主题,其中的信息可能已经有所发展或是发生改变。
    原文说的是:
    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"))

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

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

    不过最新版本也是有这个建议的。
    oclock
        8
    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暴露出来
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2830 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:49 · PVG 22:49 · LAX 06:49 · JFK 09:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.