繁体   English   中英

使用Flask-SQLAlchemy创建基本表

[英]Creating a basic Table with Flask-SQLAlchemy

我有点困惑如何使用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变量( favcolorfavshapefavflower )放在一个单独的表中,该表称为favorites

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

似乎基本! 希望有一种简单的方法可以...

创建与用户具有一对一关系的“ 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]

暂无
暂无

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

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