flask-sqlalchemy db.create_all()未创建帮助器/辅助表

时间:2019-01-26 12:32:11

标签: flask flask-sqlalchemy

我在我的应用程序中使用flask-sqlalchemy,并创建了以下模型。我正在为用户和订阅表创建多对多关系,并尝试将辅助表创建为User_Subscription。 创建此模型后,当我在命令行中运行db.create_all()时,它仅在数据库中创建3个表(具有db.Model的表),而根本没有创建帮助器表(User_Subscription)。它也没有给出任何错误。

有人可以告诉我这里出了什么问题吗?

我已经在google和stackoverflow上进行了大量搜索,但是在没有创建辅助表(通过db.table())的任何人遇到此问题的地方,我都找不到答案。 某个人遇到了一个类似的问题,但是他正面临着要跨多个数据库工作的问题。 我正在同一个数据库上做。

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)


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('subscription_status', db.String(20), nullable=False, default='Active'))

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)
    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'))
    subscriptions = db.relationship('Subscription', secondary=User_Subscription, backref= db.backref('subscriptions', lazy=True))

    def __repr__(self):
        return f"Users('{self.firstname}', '{self.email}')"

class User_Status(db.Model):
    __tablename__ = "user_status"
    id = db.Column(db.String(2), primary_key=True)
    status_desc = db.Column(db.String(20), unique=True, nullable=False)
    users_status = db.relationship('Users', backref='usersofstatus')

预期结果-将在数据库中创建4个表。

实际结果-仅创建3个表。没有创建User_Subscription(用于多对多关系的Helper表)。

2 个答案:

答案 0 :(得分:1)

经过数小时的挫折,我发现自己有错字,我使用的是db.table而不是db.Table。因此,发布此答案以防万一可以帮助别人。

答案 1 :(得分:0)

SQLAlchemy本身是新手,但是在创建User_Subscription时似乎没有从db.Model继承。为什么不上课?

class User_Subscription(db.Model):