我在我的应用程序中使用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表)。
答案 0 :(得分:1)
经过数小时的挫折,我发现自己有错字,我使用的是db.table而不是db.Table。因此,发布此答案以防万一可以帮助别人。
答案 1 :(得分:0)
SQLAlchemy本身是新手,但是在创建User_Subscription时似乎没有从db.Model继承。为什么不上课?
class User_Subscription(db.Model):