datetime при определении базы данных с использованием sqlalchemy - PullRequest
13 голосов
/ 15 июля 2011

Должен ли я использовать () с datetime.now при определении таблиц? Какой код неправильный 1 или 2?

1

Base = declarative_base()
class T(Base):
    __tablename__ = 't'

    created = Column(DateTime, default=datetime.now)

2

Base = declarative_base()
class T(Base):
    __tablename__ = 't'

    created = Column(DateTime, default=datetime.now())

1 Ответ

20 голосов
/ 15 июля 2011

Вы хотите первый случай.То, что вы делаете, говорит SqlAlchemy, что всякий раз, когда вставляется строка, запускайте эту функцию (вызывается), чтобы получить значение по умолчанию.Это может быть любая вызываемая функция или строковое значение.

Таким образом, функция вызывается точно во время вставки, и вы получаете правильную дату, когда она была вставлена.

Если вы используете второе значение, вы обнаружите, что все значения по умолчанию имеют одну и ту же дату и время.Это будет значение, которое появилось при первой обработке кода.

http://www.sqlalchemy.org/docs/core/schema.html?highlight=default#sqlalchemy.schema.ColumnDefault

This could correspond to a constant, a callable function, or a SQL clause.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...