2011-07-15 18 views
13

Czy należy używać() z datetime.now przy definiowaniu tabel? Jaki kod jest nieprawidłowy 1 lub 2?datetime w definiowaniu bazy danych przy użyciu sqlalchemy

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()) 

Odpowiedz

20

Chcesz pierwszy przypadek. To, co robisz, mówi SqlAlchemy, niż kiedy wstawiasz wiersz, uruchom tę funkcję (wywoływaną), aby uzyskać wartość domyślną. Może to być dowolna funkcja wywoływana lub wartość ciągu.

W ten sposób funkcja jest wywoływana dokładnie w momencie wstawiania, a otrzymasz poprawną datę jej wstawienia.

Jeśli użyjesz drugiej wartości, zobaczysz, że wszystkie wartości domyślne mają tę samą datetime. Będzie to wartość, która wystąpiła przy pierwszym przetworzeniu kodu.

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. 
Powiązane problemy