Как добавить колонки в БД sqlite3 (python flask_sqlalchemy)
Есть код на python с моделью пользователя типа:
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(100), unique=True, nullable=False)
password = db.Column(db.String(100), nullable=False)
Теперь необходимо добавить еще пару колонок, чтобы стало так (например):
class User(db.Model):
__tablename__ = 'user'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(100), unique=True, nullable=False)
password = db.Column(db.String(100), nullable=False)
created_on = db.Column(db.DateTime(), default=datetime.utcnow)
blabla = db.Column(db.String(20), default='')
Вопрос: Как добавить эти колонки (без удаления БД), причем так, чтобы поля обязательные (nullable=False) и по умолчанию default=random() (например) появились с новыми устновленными значениями.
P.S. В той же БД хранится еще одна таблица и все создавалось автоматически через flask_sqlalchemy
Ответы (2 шт):
ALTER TABLE user ADD created_on integer NOT NULL;
ALTER TABLE user ADD blabla text NOT NULL;
created_on - integer так как sqlite3 не имеет тип DateTime, переводите в timestamp.
Воспользуйся скриптом миграции, например Alembic. Это библиотека Python, запуск примерно такой для создания миграционной модели:
python -m alembic revision --autogenerate
и такой, для вывода модели в базу:
python -m alembic upgrade head
Но перед этим обязательно настрой Alembic xthtp .env файл. Об этом можно в репозитории почитать.