选择所有这样的作品:
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
我也收到错误,说:“无法设置属性”
所以我可以查询它,但是将列添加为过滤器,或者设置该值会导致错误。
奇怪没有?
答案 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)