flask-sqlalchemy db.create_all () не создает вспомогательную / вспомогательную таблицу - PullRequest
0 голосов
/ 26 января 2019

Я использую колбу-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 (вспомогательная таблица для связи многих со многими) не создается.

Ответы [ 2 ]

0 голосов
/ 26 января 2019

После нескольких часов разочарования я обнаружил, что у меня была опечатка, я использовал db.table вместо db.Table. Так что публикуйте этот ответ на тот случай, если он кому-то поможет.

0 голосов
/ 26 января 2019

Я новичок в SQLAlchemy, но, похоже, вы не наследуете от db.Model при создании подписки User_Subscription.Почему бы не сделать это классом?

class User_Subscription(db.Model): 
...