【问题标题】:flask-sqlalchemy query association table having additional columns具有附加列的 flask-sqlalchemy 查询关联表
【发布时间】:2019-07-02 18:35:48
【问题描述】:

我已经按照下面的代码创建了多对多关系,但是我在关联表中添加了额外的列。我想通过特定的用户 ID 检索这些列。有人可以建议如何查询吗?我读过很多帖子,但没有一个有额外的专栏。

如果我这样做:

u = Users.query.filter_by(id='8').first()
u.subscriptions[0].id

我可以从订阅表中看到数据,但如果我这样做了:

u.subscriptions[0].subscription_id
OR
u.subscriptions[0].User_Subscription

我正在获取“订阅”对象没有属性,因为我正在尝试获取 User_Subscription 关联表中的列数据。

User_Subscription = db.Table('user_subscription', 
    db.Column('user_id', db.Integer, db.ForeignKey('users.id')),
    db.Column('subscription_id', db.Integer, db.ForeignKey('subscription.id')),
    db.Column('stripe_subscription_id', db.String(100), nullable=True),
    db.Column('paypal_subscription_id', db.String(100), nullable=True)
)

class Subscription(db.Model):
    __tablename__ = "subscription"
    id = db.Column(db.Integer, primary_key=True)
    subscription_name = db.Column(db.String(100), unique=True, nullable=False)
    subscription_desc = db.Column(db.String(100), unique=False, nullable=False)
    date_created = db.Column(db.DateTime, default=datetime.datetime.utcnow)
    date_updated = db.Column(db.DateTime, default=datetime.datetime.utcnow, onupdate=datetime.datetime.utcnow)
    subscriptions = db.relationship('Users', secondary=User_Subscription, backref= db.backref('subscriptions', lazy='dynamic'))

class Users(db.Model, UserMixin):
    __tablename__ = "users"
    id = db.Column(db.Integer, primary_key=True)
    firstname = db.Column(db.String(50), unique=False, nullable=False)
    lastname = db.Column(db.String(50), unique=False, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    password = db.Column(db.String(60), nullable=False)
    date_created = db.Column(db.DateTime, default=datetime.datetime.utcnow)
    date_updated = db.Column(db.DateTime, default=datetime.datetime.utcnow, onupdate=datetime.datetime.utcnow)
    user_status_id = db.Column(db.String(2), db.ForeignKey('user_status.id'))

【问题讨论】:

    标签: flask many-to-many flask-sqlalchemy


    【解决方案1】:

    您遇到了错误(“订阅”对象没有属性),因为它是关系对象,而不是表。

    在这行代码中:

    u.subscriptions[0].User_Subscription
    

    您正在尝试访问作为关系对象的对象 User_Subcription 的属性。

    如果要创建新的关联表,请在数据库中创建相同的表并再定义一个类 UserSubscription:

    class UserSubscription(db.Model)
        __tablename__ = 'user_subscription'
        user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
        subscription_id = db.Column(db.Integer, db.ForeignKey('subscription.id'))
        stripe_subscription_id = db.Column(db.String(100), nullable=True)
        paypal_subscription_id = db.Column(db.String(100), nullable=True)
    
        user = db.relationship('Users', backref='user_subscription')
    

    然后你就可以访问 UserSubscription 类的属性了:

    u.user_subscription.subscription_id
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-10
      • 1970-01-01
      • 2020-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多