繁体   English   中英

了解flask_sqlalchemy中的一对多关系

[英]Understanding one to many relationships in flask_sqlalchemy

我正在尝试学习flask_sqlalchemy中的关系,但是很难让代码正常工作。 首先,缺少关于该主题的优秀教程,但是我仍然加入了点点滴滴的信息来编写一些代码,但是我没有得到预期的结果。

您能解释一下我在这段代码中做错了什么吗?

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgres://<my_user>:<my_password>@localhost/flask_apps'
db = SQLAlchemy(app)


class Universe(db.Model):
    __tablename__ = 'universe'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(30))
    hero = db.relationship('Characters', backref='u_name', lazy='dynamic')


class Characters(db.Model):
    __tablename__= 'characters'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50))
    uni = db.Column(db.Integer, db.ForeignKey('universe.id'))

if __name__ == '__main__':
    db.drop_all()
    db.create_all()
    dc = Universe(name='DC')
    marvel = Universe(name='Marvel')
    db.session.add(dc)
    db.session.add(marvel)
    db.session.commit()
    flash = Characters(name='Flash', u_name=dc)
    batman = Characters(name='Batman', u_name=dc)
    arrow = Characters(name='Arrow', u_name=dc)
    ironman = Characters(name='IronMan', u_name=marvel)
    thor = Characters(name='Thor', u_name=marvel)
    db.session.add(flash)
    db.session.add(ironman)
    db.session.commit()

    u = Universe.query.filter_by(name='DC').first()
    print(u.hero)

这就是我得到的输出。

SELECT characters.id AS characters_id, characters.name AS characters_name, characters.uni AS characters_uni 
FROM characters 
WHERE %(param_1)s = characters.uni

Process finished with exit code 0

我期望得到属于那个特定宇宙的角色名称。 不太确定我在这里缺少什么。

我能够解决这个问题,问题是将hero误解为一个单值属性,而是一个集合。 因此,使用以下查询即可。

u = Universe.query.filter_by(name='DC').first()
    for item in u.hero[:]:
        print(item.name)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM