1
class Quote(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    content = db.Column(db.Text)    
    votes = db.Column(db.Integer)
    author_id = db.Column(db.Integer, db.ForeignKey('author.id'))    
    date_added = db.Column(db.DateTime,default=datetime.datetime.now())    
    last_letter = db.Column(db.String(1))

上記のようなモデルがあります。私last_letterはその最後の手紙になりたいcontent。モデルが保存されるたびにこのロジックが発生するようにするには、どこにこのロジックを配置すればよいですか? ハイブリッド プロパティなどについて読んでいますが、どちらの方法が正しいかわかりません。

4

2 に答える 2

1

1.素朴な方法:sqlalchemy列のdefault値を使用して次のように設定できます:

last_letter = db.Column(db.char, default=content[len(content)-1:])

それが実際に機能するかどうかは確認しませんでした。

2.このinitをクラスに追加するようなこともできます。

def __init__(self,id,content,votes,auther_id,date_added):
    self.id = id
    self.content = content
    #yadda yadda etc
    self.last_letter = content[len(content)-1:] #or something similiar
  1. または、「挿入前」イベントに「リッスン」を使用して、ここで説明するようにこれを動的に追加することもできます。

  2. sqlalchemyを使用せずに(データベース内の)SQLトリガーでSQL計算列を使用できます。

  3. おそらくsqlalchemymappersql式をハイブリッドプロパティとして使用できます。また、私はそれを自分で試していませんでした。見た目は十分にシンプルで、おそらくこれを行うための最もエレガントな方法です。

于 2013-02-03T23:46:27.933 に答える
0

last_letter@property装飾して定義することができます

@property
def last_letter(self):
    return self.content[-1]

免責事項:デコレータの使い方を学んだばかりで、どこでも使っています

于 2013-02-03T23:53:14.423 に答える