Есть несколько способов, чтобы SQLAlchemy определял, как значение должно быть установлено при вставке / обновлении. Вы можете просмотреть их в документации .
То, как вы делаете это сейчас (определяя аргумент default
для столбца), будет влиять только тогда, когда SQLAlchemy генерирует операторы вставки. В этом случае он вызовет вызываемую функцию (в вашем случае - функцию datetime.datetime.utcnow
) и будет использовать это значение.
Однако, если вы собираетесь запускать прямой код SQL, эта функция никогда не будет запущена, поскольку вы вообще обойдете SQLAlchemy.
То, что вы, вероятно, хотите сделать, это использовать Способность по умолчанию на стороне сервера SQLAlchemy.
Попробуйте вместо этого код:
from sqlalchemy.sql import func
...
Column('my_column', DateTime, server_default=func.current_timestamp())
SQLAlchemy теперь должен сгенерировать таблицу, которая заставит базу данных автоматически вставить текущую дату в столбец my_column
. Причина, по которой это работает, заключается в том, что теперь используется значение по умолчанию на стороне database , поэтому вам больше не нужен SQLAlchemy для использования по умолчанию.
Примечание : Я думаю, что это фактически вставит местное время (в отличие от UTC). Надеюсь, что все остальное можно выяснить отсюда.