Как добавить колонки в БД 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 шт):

Автор решения: Klim
ALTER TABLE user ADD created_on integer NOT NULL;
ALTER TABLE user ADD blabla text NOT NULL;

created_on - integer так как sqlite3 не имеет тип DateTime, переводите в timestamp.

→ Ссылка
Автор решения: ivan

Воспользуйся скриптом миграции, например Alembic. Это библиотека Python, запуск примерно такой для создания миграционной модели:

python -m alembic revision --autogenerate

и такой, для вывода модели в базу:

python -m alembic upgrade head

Но перед этим обязательно настрой Alembic xthtp .env файл. Об этом можно в репозитории почитать.

→ Ссылка