алхимии. Мне в фастапи прилетают строковые даты в формате ISO-8601 по UTC, то есть с суффиксом Z (это формат такой, сво тут не при чем).
2022-06-28T19:33:26.711Z
Фастапи + пайдентик правильно это распаршевают и декодируют вот в подобное
datetime.datetime(2022, 6, 28, 19, 33, 26, 711000, tzinfo=datetime.timezone.utc)
В модели бд у меня написано вот так:
class Entity(Base):
...
timestamp = Column(DateTime(timezone=True))
И при сохранении данных через алхимию получаю вот такую ошибку:
invalid input for query argument $3: datetime.datetime(2022, 6, 28, 19, 33, 26, 711000, tzinfo=datetime.timezone.utc) (can't subtract offset-naive and offset-aware datetimes)
Пробовал определить поле вот так:
class Entity(Base):
...
timestamp = Column(DateTime)
результат тот же. По тексту ошибки в сети написаны какие-то костыли по конвертации времени со смещением, полученного из бд, но у меня проблема обратная - не записывается в бд. В доке что-то тоже ничего вменяемого не нашел. Куда смотреть?
Меня смущает вычитание там
Меня тоже, но я операции вычитания не применяю.
Покажи больше Трейса
Тебе какого именно куска? Он строк на 400
Ну хотя бы где видно что в качестве $3 летит
Вообще ещё квери, ты делаешь merge?
Так сразу после двоеточия значение же datetime и стоит. Это и есть значение третьего аргумента
А какой коннектор?
Эммм. Нет. Это просто SELECT. Аргументы все в WHERE-кондишен определены. Сейчас скину кусок
asyncpg
SELECT ... WHERE entity.id = %s AND entity.name = %s AND entity.timestamp = %s LIMIT %s OFFSET %s
Это кажется не сохранение
Неа, я наебнулся и написал неправильно то место, где возникает ошибка. Это запрос на проверку условий существования. Не суть. Сперва запрашиваем определенное количество записей и проверяем, что среди них нет того, что нужно добавить.
https://github.com/MagicStack/asyncpg/issues/138
Странно это всё, проверь тип колонки в бд
Ага, я алембиком накатывал бд без таймзоны.
Похоже в этом дело
Обсуждают сегодня