3

次のようにすべての作品を選択します。

q = session.query(products)

今、私は WHERE フィルターを追加したいので、試しています:

q = session.query(products).filter_by(stock_count=0)

「nonetype」オブジェクトには属性「class_manager」がないというエラーが表示されます。

何が問題なのかわからない?

更新 私がするときのように、列はうまくマップされているようです:

q = session.query(products)

for p in q:
   print p.stock_count

値を出力します。

しかし、もしそうなら:

p.stock_count = 6

「属性を設定できません」というエラーも表示されます

したがって、クエリを実行できますが、列をフィルターとして追加するか、値を設定するとエラーが発生します。

変じゃない?

4

4 に答える 4

2

裸の Table オブジェクトに対して orm を使用しようとしている可能性があります。

このコードは 0.5 (ベース centos 6.2 のもの) で動作します。

#!/usr/bin/env python
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

db = create_engine(localopts.connect_string)
Session = sessionmaker(bind=db)

Base = declarative_base()
Base.metadata.reflect(bind=db)

class some_table(Base): 
    __table__ = Base.metadata.tables['table_name']

session = Session()

for row in session.query(some_table.username).filter_by(username="some-user"):
    print row
于 2012-03-09T11:47:56.280 に答える
0

filter_by の後に .all() を追加してみましたか:

q = session.query(products).filter_by(stock_count=0).all()
于 2010-08-02T22:57:05.167 に答える
0

filter_by()はキーワード ディクショナリで動作します。実際には を使用しますfilter()。さらに、単に使用することはできませんstock_count(おそらく、テーブル定義コードを表示していませんでした)、products.stock_countまたはおそらく使用する必要がありproducts.__class__.stock_countます。だから試してください: q=session.query(products).filter(product.stock_count==0)

于 2010-10-19T23:46:32.670 に答える
0

Literal Sqlを試しましたか?同じエラー メッセージが表示されましたが、リテラル sql を使用すると表示されなくなりました。

したがって、あなたの例では、次のようになります。

q = session.query(products).filter('stock_count==0')
于 2010-08-05T09:10:33.513 に答える