次のモデルを使用してデータを格納しています。Flask-SQLAlchemy:フェッチ時にデータの属性を操作する
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
timestamp=db.Column(DateTime(timezone=True), nullable=False)
def __init__(self, username, timestamp=None):
self.username = username
if timestamp is None:
timestamp =datetime.datetime.now()
self.timestamp = timestamp
def __repr__(self):
return '<User %r>' % self.username
は今、私の質問は:
user = User.query.filter_by(username='admin').first()
を使用してデータをフェッチするとき、私は、データをフェッチし、User
オブジェクトに変換されることを理解できますか?
私が達成したいのは、上記のようにクエリを使用してデータを取得すると、データが自動的に操作されるということです。
つまり、私の場合は、タイムスタンプが認識されています。私はこれを行うためにpytz.localize()を使用します。
私が試した:
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
timestamp=db.Column(DateTime(timezone=True), nullable=False)
def __init__(self, username, timestamp=None):
self.username = username
if timestamp is None:
timestamp =datetime.datetime.now()
timestamp = pytz.utc.localize(timestamp)
self.timestamp = timestamp
def __repr__(self):
return '<User %r>' % self.username
を私はそれが動作しない、
if(timestamp is none)
new entry
initialize timestamp
make timezone aware #even if fetched from db
self.timestamp=timestamp`
、オブジェクトが初期化されるときに、のようなものと考えた。しかし。 __init__
は、データを照会するときに呼び出されません。何ができますか?
うわー。これは私が探していた事実です。しかし、私はなぜそれが機能していないのか分かりません。私は '''@orm.reconstructor デフinit_on_load(自己)を追加しました: self.timestamp = pytz.utc.localize(self.timestamp) '' ' プリント "と呼ばれるREonstructorを" しかし、何のメッセージが印刷されません取得します。 –
私のプロジェクト(Python 3.4)でテストしただけでなく、printステートメントを追加してメッセージを出力します。 –
@Stjinマシンでは動作しません。 Ubuntuを動かしているVMを試してみました。それをもっと見ていきます。どうもありがとう。私は2日以来それに固執していた。たくさんのことを試しましたが、「再構成」という言葉は私の心の近くに来ませんでした。 –