2016-05-30 2 views
1

У меня есть база данных и я пытаюсь запросить информацию с помощью функции MID(). В обычном SQL я хотел бы использовать MID, такие как (С W3 пример сайта) ..Python SQLALCHEMY-запрос с использованием MID()

SELECT MID(City,1,4) AS ShortCity 
FROM Customers; 

Преобразование это SQLAlchemy было немного сложной задачей. Я могу выполнить запрос с разбивкой по страницам, но не используя середину. До сих пор я Оригинальный запрос, который работает ..

links = Item.query.filter(Item.title.like('%' +search_term +'%')).paginate(page, 10, True) 

Преобразование это не работает ..

links = Item.query.filter(func.mid(Item.title.like, 1, 3)('%' +search_term + '%')).paginate(page, 10, True) 



    TypeError: 'Function' object is not callable 

Я хочу только ху количество символов из заголовка (строка столбца)

+0

Я вижу, что вам не хватает запятой ',', то есть 'func.mid (Item.title.like, 1, 3) ('%' + search_term + '%')' должно быть 'func .mid (Item.title.like, 1, 3), ('%' + search_term + '%') '. см., если это решает проблему, могут быть другие вещи не так с этим кодом, но typeerror встречается, потому что объект, возвращенный из func.mid (...), не может быть вызван, и '('%' + search_term + '%') 'затем обрабатывается как аргумент функции –

+0

дает ошибку diff .. – Anekdotin

+0

OperationalError: (sqlite3.OperationalError) рядом с«% »: синтаксическая ошибка [SQL: u'SELECT items.id AS items_id, items.title AS items_title, items.link AS items_link, items.description AS items_description, items.member_since AS items_member_since, items.last_updated AS items_last_updated, items.click_count AS items_click_count \ nFROM items \ nWHERE mid (?,?,?) AND% tor% \ n LIMIT? OFFSET? '] [Параметры: (<связанный метод InstrumentedAttribute.like of >, 1, 3, 10, 0)] – Anekdotin

ответ

1

Я вижу, что вам не хватает запятой , между круглыми скобками в

func.mid(Item.title.like, 1, 3)('%' +search_term + '%') 

, который делает второе выражение в круглых скобках аргументом для первого. То есть источник, за исключением

TypeError: 'Function' object is not callable. 

Но, чтобы сгенерировать LIKE оператор, попробуйте:

func.mid(Item.title, 1, 3).like('%' +search_term + '%') 

Это дает ИНЕКЕ, что ваш код питона, кажется предложить. В вашем коде like неуместен.

Однако, если вы хотите сгенерировать следующий SQL:

SELECT MID(City,1,4) AS ShortCity 
FROM Customers; 

Соответствующий код SQLAlchemy будет

session.query(func.mid(Customer.city, 1, 4).label('ShortCity')) 

предполагая, что модель называется Customer и имеет поле с именем city.

+0

im a noob, но почему session.query над Item.query? Я неправильно настроил свой проект? – Anekdotin

+0

нет, они оба действительны, я просто _happened_, чтобы писать свой запрос, используя сеанс явно. За кулисами sqlalchemy все еще создает сеанс. –

+0

Не могу заставить его работать .. :( – Anekdotin

Смежные вопросы