Просто sqlalchemy фильтр не работает - PullRequest
3 голосов
/ 03 августа 2010

Выбрать все работает так:

q = session.query(products)

Теперь я хочу добавить фильтр WHERE, поэтому я пытаюсь:

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

Я получаю сообщение об ошибке, говорящее о том, что у объекта «нетипа» нет атрибута «class_manager».

Не знаете, в чем проблема?

Обновление Кажется, что столбец отображен нормально, например, когда я делаю:

q = session.query(products)

for p in q:
   print p.stock_count

Выводит значение.

Но если я сделаю:

p.stock_count = 6

Я также получаю сообщение об ошибке: «не могу установить атрибут»

Так что я могу запросить его, но добавление столбца в качестве фильтра ИЛИ установка значения вызывает ошибку.

Странно нет?

Ответы [ 4 ]

2 голосов
/ 09 марта 2012

Возможно, вы пытаетесь использовать 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
0 голосов
/ 05 августа 2010

Вы пробовали Буквальный Sql ?У меня было то же сообщение об ошибке, но когда я использовал литерал sql, оно пропало.

Так что для вашего примера это будет что-то вроде:

q = session.query(products).filter('stock_count==0')
0 голосов
/ 20 октября 2010

filter_by() работает со словарем ключевых слов, вы действительно хотите использовать filter(). Кроме того, вы не можете просто использовать stock_count (возможно, вы не указали код определения таблицы), вы должны использовать products.stock_count или, возможно, products.__class__.stock_count. Так что постарайтесь: q=session.query(products).filter(product.stock_count==0)

0 голосов
/ 03 августа 2010

вы пытались добавить .all () после вашего filter_by:

q = session.query(products).filter_by(stock_count=0).all()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...