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

您可能正在尝试对裸表对象使用 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

你试过文字 Sql吗?我有同样的错误信息,但是当我使用文字 sql 时它就消失了。

因此,对于您的示例,它将类似于:

q = session.query(products).filter('stock_count==0')
于 2010-08-05T09:10:33.513 回答
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 回答