2011-07-15 14 views
13

テーブルを定義する際にdatetime.nowを使用する必要がありますか?どのようなコード1または2が間違っていますか?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()) 

答えて

20

あなたは最初のケースが欲しいです。あなたがやっていることは、行が挿入されるたびにSqlAlchemyに伝えることです。この関数(呼び出し可能)を実行してデフォルト値を取得します。それは呼び出し可能な関数または文字列値です。

このようにして、関数は挿入時に正確に呼び出され、挿入された正しい日付を取得します。

2番目の値を使用すると、すべてのデフォルト値が同じdatetimeを共有していることがわかります。これはコードが最初に処理されたときに発生した値です。

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. 
関連する問題