私はフラスコ/ sqlalchemy初心者ですが、これはかなりシンプルであるようです。しかし、私の人生のために、私はそれを働かせることはできません。私はデータベースオブジェクトのリストを返す実行する幾分複雑なクエリを持っています。クエリで返されたオブジェクトを更新する方法
items = db.session.query(X, func.count(Y.x_id).label('total')).filter(X.size >= size).outerjoin(Y, X.x_id == Y.x_id).group_by(X.x_id).order_by('total ASC')\
.limit(20).all()
このリストを取得した後、リストをループして各アイテムのプロパティを更新します。
for it in items:
it.some_property = 'xyz'
db.session.commit()
は、しかし何が起こっているのか、私は、私はクレイジーじゃないエラーに
it.some_property = 'xyz'
AttributeError: 'result' object has no attribute 'some_property'
を取得していますということです。私はプロパティがdb.Modelからサブクラス化されたモデルXに存在するということは肯定的です。クエリに関する何かが、私がそれらがデバッガに存在することをはっきりと見ることができますが、私が属性にアクセスするのを妨げています。どんな助けもありがとう。
class X(db.Model):
x_id = db.Column(db.Integer, primary_key=True)
size = db.Column(db.Integer, nullable=False)
oords = db.relationship('Oords', lazy=True, backref=db.backref('x', lazy='joined'))
def __init__(self, capacity):
self.size = size
これはまさに私が探していたものでした。ありがとうございました。 – dcole2929
for-loop内のインスタンスでクラス変数を上書きすることを修正しました。最初に 'it.X'と書いてみたが、解凍して行くつもりだった。 –