Как указать USING start_time::timestamp без часового пояса в Flask SQLALchemy?Python

Программы на Python
Anonymous
Как указать USING start_time::timestamp без часового пояса в Flask SQLALchemy?

Сообщение Anonymous »

Моя цель состояла в том, чтобы изменить тип данных столбца со String на DateTime в Flask с помощью Flask SQLAlchemy.
Это рассматриваемая модель: п>

Код: Выделить всё

class Show(db.Model):
id = db.Column(db.Integer, primary_key=True)
venue_id = db.Column(db.Integer, db.ForeignKey('venues.id'))
venue_name = db.Column(db.String)
artist_id = db.Column(db.Integer, db.ForeignKey('artists.id'))
artist_name = db.Column(db.String)
artist_image_link = db.Column(db.String(500))

# column at fault 👇🏾
start_time = db.Column(db.DateTime(timezone=False))

def __repr__(self):
return f''
Запуск миграции базы данных flask работает нормально и изначально генерирует этот сценарий миграции:

Код: Выделить всё

from alembic import op
import sqlalchemy as sa

# revision identifiers, used by Alembic.
revision = '3ac508896870'
down_revision = '90b7c2f14692'
branch_labels = None
depends_on = None

def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.alter_column('shows', 'start_time',
existing_type=sa.VARCHAR(length=50),
type_=sa.DateTime(),
existing_nullable=True)
# ### end Alembic commands ###

def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.alter_column('shows', 'start_time',
existing_type=sa.DateTime(timezone=False),
type_=sa.VARCHAR(length=50),
existing_nullable=True)
# ### end Alembic commands ###
После запуска обновления базы данных flask я получаю сообщение об ошибке со следующей подсказкой в ​​конце:

Код: Выделить всё

HINT:  You might need to specify "USING start_time::timestamp without time zone".

[SQL: ALTER TABLE shows ALTER COLUMN start_time TYPE TIMESTAMP WITHOUT TIME ZONE ]
(Background on this error at: https://sqlalche.me/e/14/f405)
Основываясь на этом, я просмотрел документацию SQLAlchemy по типу DateTime и, полагая, что проблема заключалась в отсутствующем параметре часового пояса, я добавил его в сценарий миграции следующим образом:
п>

Код: Выделить всё

op.alter_column('shows', 'start_time',
existing_type=sa.VARCHAR(length=50),
type_=sa.DateTime(timezone=False),
existing_nullable=True)
Однако ошибка не исчезла. Итак, я спрашиваю, как правильно указать USING start_time::timestamp без часового пояса? Или, возможно, подсказка об ошибке не была правильным решением?
Кстати, я новичок в Flask, поэтому просто просматриваю документацию, чтобы разобраться. p>
РЕДАКТИРОВАТЬ: Я решил эту проблему для себя, полностью удалив существующий столбец типа String и заменив его новым столбцом DateTime. Это не будет идеальным для всех решений и стало возможным только потому, что в таблице не было важных данных.
Все еще ищем менее кардинальные решения.

Подробнее здесь: https://stackoverflow.com/questions/737 ... d-in-flask

Вернуться в «Python»