Flask SQLAlchemy 多对多关系新属性

3

我正在使用Flask和SQLAlchemy以及数据库中的多对多关系。它很好用,但我想在user_routes表中添加新属性(字符串tarif)。如何在查询中编辑此属性?这是可能的吗?谢谢。

这是我的插入数据库查询:

route = get_route(request.form['fromStation'],request.form['toStation'],date_object)
user = get_user(request.form['userToken'])
route.users.append(user)
user.routes.append(route)
db.session.commit()

模型

from app import db

user_routes = db.Table('user_routes',
    db.Column('route_id', db.Integer, db.ForeignKey('route.route_id'), primary_key=True),
    db.Column('user_id', db.Integer, db.ForeignKey('user.user_id'), primary_key=True)
)

class User(db.Model):
    user_id = db.Column(db.Integer, primary_key=True)
    token = db.Column(db.String(255), unique=True)
    routes = db.relationship("Route", secondary=user_routes)

    def __repr__(self):
        return '<User %r>' % (self.token)

class Route(db.Model):
    route_id = db.Column(db.Integer, primary_key=True)
    route_from = db.Column(db.String(100))
    route_to = db.Column(db.String(100))
    date_time = db.Column(db.DateTime)
    free_seats = db.Column(db.Integer)
    users = db.relationship("User", secondary=user_routes)

    def __repr__(self):
        return '<Route %r>' % (self.route_id)
1个回答

10

在工作时间以外,我找到了解决方案:关联对象

from app import db

class User_has_route(db.Model):
    __tablename__ = 'user_has_route'
    route_id = db.Column(db.Integer, db.ForeignKey('route.route_id'), primary_key=True)
    user_id = db.Column(db.Integer, db.ForeignKey('user.user_id'), primary_key=True)
    tarif = db.Column(db.String(30))
    route = db.relationship("Route", back_populates="users")
    user = db.relationship("User", back_populates="routes")

class User(db.Model):
    __tablename__ = 'user'
    user_id = db.Column(db.Integer, primary_key=True)
    token = db.Column(db.String(255), unique=True)
    routes = db.relationship("User_has_route", back_populates="user")

    def __repr__(self):
        return '<Userik %r>' % (self.token)

class Route(db.Model):
    __tablename__ = 'route'
    route_id = db.Column(db.Integer, primary_key=True)
    route_from = db.Column(db.String(100))
    route_to = db.Column(db.String(100))
    date_time = db.Column(db.DateTime)
    free_seats = db.Column(db.Integer)
    users = db.relationship("User_has_route", back_populates="route")

    def __repr__(self):
        return '<Route %r>' % (self.date_time)

1
谢谢。这正是我在寻找的内容。有关Association Object的更多信息,请参阅SQL Alchemy文档:http://docs.sqlalchemy.org/en/latest/orm/basic_relationships.html#association-object - dace

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接