247

これは私の宣言型モデルです:

import datetime
from sqlalchemy import Column, Integer, DateTime
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class Test(Base):
    __tablename__ = 'test'

    id = Column(Integer, primary_key=True)
    created_date = DateTime(default=datetime.datetime.utcnow)

ただし、このモジュールをインポートしようとすると、次のエラーが発生します。

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "orm/models2.py", line 37, in <module>
    class Test(Base):
  File "orm/models2.py", line 41, in Test
    created_date = sqlalchemy.DateTime(default=datetime.datetime.utcnow)
TypeError: __init__() got an unexpected keyword argument 'default'

整数型を使用すると、デフォルト値を設定できます。どうしたの?

4

10 に答える 10

246

DateTime入力としてデフォルトのキーがありません。デフォルトのキーは、Column関数への入力である必要があります。これを試して:

import datetime
from sqlalchemy import Column, Integer, DateTime
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class Test(Base):
    __tablename__ = 'test'

    id = Column(Integer, primary_key=True)
    created_date = Column(DateTime, default=datetime.datetime.utcnow)
于 2012-11-13T23:01:29.300 に答える
76

デフォルトで sqlalchemy 組み込み関数を使用することもできますDateTime

from sqlalchemy.sql import func

DT = Column(DateTime(timezone=True), default=func.now())
于 2015-05-06T17:17:25.300 に答える
6

defaultキーワード パラメータは、Column オブジェクトに指定する必要があります。

例:

Column(u'timestamp', TIMESTAMP(timezone=True), primary_key=False, nullable=False, default=time_now),

デフォルト値は、ここでは次のように定義した callable にすることができます。

from pytz import timezone
from datetime import datetime

UTC = timezone('UTC')

def time_now():
    return datetime.now(UTC)
于 2012-11-13T23:01:17.677 に答える
0

Jeff Widman は、彼の回答で、UTC タイムスタンプの独自の実装を作成する必要があると述べました。func.utcnow()

私はそれを自分で実装したくなかったので、すでに仕事をしていて、多くの人々によって維持されているpythonパッケージを検索して見つけました。

パッケージ名はspoqa/sqlalchemy-utです。

パッケージの機能の要約は次のとおりです。

aware のみを取得し、awaredatetime.datetimeのみを返し、 datetime.datetimenaive を取得または返すことはなくdatetime.datetime、データベースのタイムスタンプが常に UTC でエンコードされることを保証し、期待どおりに動作します。

于 2021-07-30T09:27:08.263 に答える