2010-08-02 102 views
3

Sélectionnez tous les travaux comme celui-ci:filtre simplement sqlalchemy ne fonctionne pas

q = session.query(products) 

Maintenant, je veux ajouter un filtre WHERE, donc je suis en train:

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

je reçois une erreur disant « NoneType » L'objet n'a pas d'attribut 'class_manager'.

Vous ne savez pas quel est le problème?

Mise à jour La colonne semble être mis en correspondance bien, comme quand je fais:

q = session.query(products) 

for p in q: 
    print p.stock_count 

Il délivre la valeur.

Mais si je fais:

p.stock_count = 6 

Je reçois une erreur aussi, en disant: « ne peut pas définir l'attribut »

Je peux interroger pour elle, mais en ajoutant la colonne comme filtre, OU la définition de la valeur provoque une erreur.

Étrange non?

+0

Montrez-nous votre code d'installation? –

+0

@Seamus J'ai mis à jour ma question ... – Blankman

+0

J'ai essayé: session.query (produits) .filter_by (products.stock_count == 0) mais j'ai une erreur: l'objet 'table' n'a pas d'attribut 'stock_count'. – Blankman

Répondre

0

Avez-vous essayé d'ajouter un .Toutes() après votre filter_by:

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

même numéro ...... – Blankman

+0

ouais - J'ai aussi vérifié cela de ma part - pouvez-vous poster votre classe 'products' dans votre question? – dls

0

Avez-vous essayé Literal Sql? J'ai eu le même message d'erreur mais quand j'ai utilisé sql littéral il était parti.

Donc, pour votre exemple, il serait quelque chose comme:

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

Si vous utilisez '.filter()', vous pouvez simplement utiliser '.filter (product.stock_count == 0)' au lieu de littéraux. –

0

filter_by() travaille avec un dictionnaire de mots clés, vous voulez utiliser filter(). De plus, vous ne pouvez pas simplement utiliser stock_count (probablement, vous n'avez pas affiché votre code de définition de table), vous devez utiliser products.stock_count ou éventuellement products.__class__.stock_count. Essayez donc: q=session.query(products).filter(product.stock_count==0)

2

Vous essayez peut-être d'utiliser orm par rapport à un objet Table vide.

Ce code fonctionne sur 0,5 (celui de CentOS 6.2 de base):

#!/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

Ceci est génial et me montre exactement ce que je veux faire SQLSoup mais ne peut pas trouver parce qu'il n'y a pas de documentation.Merci d'avoir permis à SQLAlchemy de faire ce dont j'avais tellement besoin. –