Как воссоздать базу данных в SQLAlchemy из Flask? - PullRequest
0 голосов
/ 15 мая 2019

Я использую SQLAlchemy ORM Framework из проекта Flask.Я хотел добавить еще одну колонку к одной из моих моделей.После этого я использовал db.session.drop_all(), чтобы удалить все текущие записи в базе данных, а затем попытался воссоздать новый экземпляр с новым полем.

Всякий раз, когда я пытался, я получаю эту ошибку

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no 
such table: user
[SQL: SELECT user.id AS user_id, user.username AS user_username, user.email AS user_email, user.password AS user_password, user.image_file AS user_image_file 
FROM user]

Я думаю, что мне может понадобиться каким-то образом восстановить базу данных, но я не уверен, как.Я просмотрел документацию, но не смог найти ничего полезного.

__ init __. Py

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

models.py

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), unique=True, nullable=False)
    email = db.Column(db.String(40), unique=True, nullable=False) #newly added field
    password = db.Column(db.String(60), nullable=False)
    image_file = db.Column(db.String(20), nullable=False, default='default.jpg')
    messages = db.relationship('Message', backref='user', lazy=True)

1 Ответ

1 голос
/ 15 мая 2019

Когда вы использовали db.drop_all(), вы удалили все таблицы, поэтому теперь вы не можете вставлять данные, потому что нет таблицы. Вам нужно создать таблицу снова с db.create_all(), как упоминалось @SuperShoot.

Вы должны использовать что-то для миграции, например alembic или flask-sqlalchemy. Таким образом, вы можете добавить новый столбец в ваш ORM. Запустите flask db migrate -m 'new column', это обнаружит изменения. Затем запустите flask db upgrade head, чтобы применить эти изменения к вашей базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...