2010-08-02 123 views
3

只需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 

我得到一個錯誤也說:「不能設置屬性」

所以我可以查詢,但加上列作爲過濾器,或者設置該值會導致錯誤。

奇怪的沒有?

+0

我們展示您的設置代碼? – 2010-08-02 22:57:57

+0

@Seamus我更新了我的問題... – Blankman 2010-08-02 23:24:01

+0

我試過了:session.query(products).filter_by(products.stock_count == 0)但我得到一個錯誤:'table'對象沒有屬性'stock_count'。 – Blankman 2010-08-02 23:28:36

回答

0

有你想你的filter_by後加入。所有():

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

同樣的問題...... – Blankman 2010-08-02 23:13:30

+0

是的 - 我證實了在我的最後 - 你可以在你的問題中發佈你的「產品」類嗎? – dls 2010-08-02 23:14:14

0

你試過Literal Sql?我有相同的錯誤消息,但是當我使用文字SQL它已經消失了。

因此,對於你的例子會是這樣的:

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

如果你使用'.filter()',你可以使用'.filter(product.stock_count == 0)'而不是文字。 – 2010-08-05 11:07:18

0

filter_by()作品與關鍵字的字典,你真的想使用filter()。另外,你不能只使用stock_count(可能,你沒有顯示你的表定義代碼),你必須使用products.stock_count或可能products.__class__.stock_count。因此,請嘗試: q=session.query(products).filter(product.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 
+0

這真棒,並顯示我正是我想要SQLSoup做,但無法找到,因爲有旁邊沒有文檔。感謝您提供了獲取SQLAlchemy的橋樑,以便我做到這一點。 – 2015-09-04 03:57:04