【问题标题】:Creating a basic Table with Flask-SQLAlchemy使用 Flask-SQLAlchemy 创建基本表
【发布时间】:2017-03-17 00:47:22
【问题描述】:

我有点困惑如何使用 Flask-SQLAlchemy 创建表——我在别处找到的示例似乎使用了与下面不同的初始化(例如,使用 Base)。

db = SQLAlchemy(app)
migrate = Migrate(app, db)

# Define models
roles_users = db.Table('roles_users',
        db.Column('user_id', db.Integer(), db.ForeignKey('user.id')),
        db.Column('role_id', db.Integer(), db.ForeignKey('role.id')))

class Role(db.Model, RoleMixin):
    id = db.Column(db.Integer(), primary_key=True)
    name = db.Column(db.String(80), unique=True)
    description = db.Column(db.String(255))

class User(db.Model, UserMixin):
    id = db.Column(db.Integer, primary_key=True)
    email = db.Column(db.String(255), unique=True)
    password = db.Column(db.String(255))
    active = db.Column(db.Boolean())
    confirmed_at = db.Column(db.DateTime())
    nickname = db.Column(db.String(255))
    favcolor = db.Column(db.String(255)) #FAVS
    favshape = db.Column(db.String(255)) #FAVS
    favflower = db.Column(db.String(255)) #FAVS
    roles = db.relationship('Role', secondary=roles_users,
                            backref=db.backref('users', lazy='dynamic'))

    def __str__(self):
            return '<User id=%s email=%s>' % (self.id, self.email)

基本上,假设我想将所有fav 变量(favcolor、favshape 和favflower)放在一个单独的表中,称为favorites。

如何确保我可以使用 primary_key 访问这些收藏夹?

看起来很基本!希望有一种简单的方法可以做到这一点......

【问题讨论】:

    标签: python database sqlalchemy flask-sqlalchemy


    【解决方案1】:

    创建与用户具有一对一关系的“UserFavorites”模型。

    class UserFavorites(db.Model):
        user_id = db.Column(db.Integer, db.ForeignKey(User.id), primary_key=True)
        color = db.Column(db.String, nullable=False, default='')
        shape = db.Column(db.String, nullable=False, default='')
        flower = db.Column(db.String, nullable=False, default='')
    
        user = db.relationship(User, backref=db.backref('favorites', uselist=False))
    

    在创建用户实例时创建一个 UserFavorites 实例。

    user = User(email='example@example.com', favorites=UserFavorites(color='green'))
    db.session.add(user)
    db.session.commit()
    
    user = User.query.filter(
        User.email == 'example@example.com'
    ).options(
        db.joinedload(User.favorites)
    ).one()
    print user.favorites.color
    

    您可以加入此关系以向用户查询其收藏夹。

    likes_green = User.query.join(User.favorites).filter(
        UserFavorites.color == 'green'
    ).all()
    print [u.email for u in likes_green]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-18
      • 2016-01-14
      • 1970-01-01
      • 2020-11-12
      • 2019-03-13
      • 2022-01-15
      • 2021-03-10
      相关资源
      最近更新 更多