简单的SQLAlchemy过滤器不起作用

3 投票
4 回答
7423 浏览
提问于 2025-04-16 02:13

选择所有的内容是这样做的:

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

撰写回答