python - 使用Flask-SQLAlchemy时多对多遇到问题,请帮忙看看
PHP中文网
PHP中文网 2017-04-17 14:37:41
[Python讨论组]
PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(2)
迷茫

你的问题好像是problemtag.id找不到外码,这个是因为 Flask-SQLAlchemy 创建的实际表的名称不是problemtag, 而是problem_tag,可以在表中通过 __tablename__来指定表的名称。
另外多对多关系,只需要定义一边就可以了。

tags_table = db.Table('problem_tags',
                      db.Column('problem_id', db.Integer, db.ForeignKey('problem.id')),
                      db.Column('tag_id', db.Integer, db.ForeignKey('problemtag.id'))
)


class ProblemTag(db.Model):
    __tablename__ = 'problemtag'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(80))
    problems = db.relationship('Problem', secondary=tags_table,
                               backref=db.backref('tags', lazy='dynamic'))

    def __init__(self, name):
        self.name = name

    def __repr__(self):
        return "<Tag %r>" % self.name


class Problem(db.Model):
    __tablename__ = 'problem'
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(80))


    def __init__(self, title, tags):
        self.title = title
        self.tags = tags

    def __repr__(self):
        return "<Problem %r>" % self.title

巴扎黑

Many-to-many relationship 只需要在一边定义

参见
https://pythonhosted.org/Flask-SQLAlchemy/models.html#many-to-many-relationships

ProblemTagproblems去掉应该就可以

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号