Python Flask-SQLAlchemy报sqlalchemy.exc.NoForeignKeysError是什么,,谢谢大家。代码如下,总是
Python Flask-SQLAlchemy报sqlalchemy.exc.NoForeignKeysError是什么,,谢谢大家。代码如下,总是
谢谢大家。
代码如下,总是会提示这个错误:
sqlalchemy.exc.NoForeignKeysError: Could not determine join condition between parent/child tables on relationship Problem.tags - there are no foreign keys linking these tables via secondary table 'problem_tags'. Ensure that referencing columns are associated with a ForeignKey or ForeignKeyConstraint, or specify 'primaryjoin' and 'secondaryjoin' expressions.
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): 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.nameclass Problem(db.Model): id=db.Column(db.Integer, primary_key=True) title=db.Column(db.String(80)) tags = db.relationship('ProblemTag',secondary=tags_table, backref=db.backref('problems', lazy='dynamic')) def __init__(self,title,tags): self.title=title self.tags=tags def __repr__(self): return "<Problem %r>" % self.title
你的问题好像是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.nameclass 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
把ProblemTag的problems去掉应该就可以
编橙之家文章,
相关内容
- django添加后台运行进程具体位置在哪里,django具体位置
- Python ORM关于Peewee定义models创建表问题,ormpeewee,比如c
- python框架都能会被使用到吗,python框架使用,框架太多了
- python菜鸟问题,return报错是什么原因引起的?,python
- 关于python数据库之间实时备份用django可以实现吗,pyt
- Beautifulsoup库内NavigableString是作什么用的?,,看文档没怎
- python语言中的二维数组怎么实现?,python二维数组, t
- python算法. 在球面上取随机N个均匀的点(或者间距不小于
- py第三方库 pyspider使用redis分布式,pyspiderredis,在部署
- 什么是flask的架构和如何读flask的源码,flask架构源码
评论关闭