简单的SQLAlchemy过滤器不起作用
选择所有的内容是这样做的:
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 个回答
0
你试过在你的 filter_by 后面加一个 .all() 吗?
q = session.query(products).filter_by(stock_count=0).all()
0
你试过使用直接写SQL语句吗?我之前也遇到过同样的错误信息,但当我使用直接写的SQL语句后,问题就解决了。
所以在你的例子中,可以这样做:
q = session.query(products).filter('stock_count==0')
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