只是sqlalchemy过滤器无法正常工作

时间:2010-08-02 22:33:09

标签: python sqlalchemy orm updating

选择所有这样的作品:

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 :(得分:2)

您可能正在尝试将orm用于裸露的Table对象。

此代码适用于0.5(基本原点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

答案 1 :(得分:0)

您是否尝试在filter_by之后添加.all():

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

答案 2 :(得分:0)

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

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

q = session.query(products).filter('stock_count==0')

答案 3 :(得分:0)

filter_by()使用关键字词典,您实际上想要使用filter()。另外,您不能只使用stock_count(可能,您没有显示您的表定义代码),您必须使用products.stock_count或可能products.__class__.stock_count。所以尝试: q=session.query(products).filter(product.stock_count==0)