2016-10-05 2 views
1

Я работаю над поисковой системой внутри компании, написанной на python, использующей флягу и sqlalchemy (sqlite). Моя текущая проблема в том, что я бы хотел.Python Flask Sqlalchemy Subst Query

A.) Запрос на определенное количество информации для поля описания B.) Предпочтительный запрос перед ним 50 символов и после него.

Очень похоже на Google в поле ссылки. Если вы что-то ищете, он возвращает ссылки со 100 символами слов ниже.

Я читал документацию и обнаружил, что в sqlalchemy нет функции mid(). Я также заметил, с этого поста, что SQLAlchemy только поддерживает макс, мин, и Avg sqlalchemy: get max/min/avg values from a table

SQL Documentation функций http://docs.sqlalchemy.org/en/latest/core/functions.html

Я пытался реализовать такой запрос

links = Item.query(func.mid(Item.description, 0, 200).like('%helloworld%')) 

I releazed sqlite имеет синтаксис Substr и попытался Item.query.filter (func.substr (Item.description, 0, 200) == '% helloworld%')

Есть ли способ в sqlalchemy для навигации по этой проблеме?

Мой код:

from sqlalchemy.sql.functions import func 

def mainSearch(searchterm): 
    links = Item.query(func.mid(Item.title, 1, 3).Item.title.like('%e%')) 
    return links 

HTML/Дзиндзя код:

{% for link in links.items %} 

<div id="resultbox"> 

     <div id="linkTitle"><h4><a href="{{ link.link }}">{{ link.title }}</a></h4> </div> 
     <div id="lastUpdated">Last Updated: {{ link.last_updated }} </div> 
     <div id="linkLink">{{ link.link }}</div> 
      <div id="linkDescription">{{ link.description | safe }}</div> 
</div> 

Ошибка

TypeError: объект 'BaseQuery' не отозваны

Моя база данных: Sqlite

Я хотел запроса в SQL тоже похоже:

SELECT MID(column_name,start,length) AS some_name FROM table_name; 

В целом я пытаюсь сделать это в данных мы делаем запрос в колонке Описание:

Пример текста:

Статья (сокращенно ART) - это слово (префикс или суффикс), который используется рядом с существительным, чтобы указать тип ссылки, создаваемой существительным. Статьи определяют грамматическую определенность существительного, на некоторых языках, распространяющихся на объемный или численный охват. Статьи на английском языке - это и a/an, и (в некоторых контекстах) некоторые. «А» и «а» - это современные формы древнеанглийского «а», который в англоязычных диалектах был числом «один» (ср. «На», в саксонских диалектах) и сохранился в современных шотландцев как число «ован». И «на» (отменяемый «один» норманнами), и «а» сохранились в современном английском языке, причем «один» использовался как число и «an» («a», перед существительными, начинающимися созвучным звуком), как неопределенный артикль.

Во многих языках статьи - это особая часть речи, которую невозможно легко комбинировать с другими частями речи.На английском языке статьи часто рассматриваются как часть более широкой речевой категории, называемой детерминантами, которая объединяет статьи и демонстрационные материалы (такие как «это» и «это»).

В языках, где используются статьи, каждое общее существительное за некоторыми исключениями выражается определенной определенностью (например, определенной или неопределенной), так же, как многие языки выражают каждое существительное с определенным грамматическим числом (например, единичным или множественным числом). Каждое существительное должно сопровождаться статьей, если таковая имеется, соответствующей ее определенности, и отсутствием статьи (считающейся нулевой статьей) сама определяет определенную определенность. Это отличается от других прилагательных и определяющих факторов, которые обычно являются необязательными. Этот обязательный характер статей делает их одними из самых распространенных слов на многих языках - на английском языке, например, наиболее частое слово - это. [1]

Изделия обычно характеризуются либо как определенные, либо неопределенные. [2] Несколько языков с хорошо развитыми системами статей могут различать дополнительные подтипы. В каждом типе языки могут иметь различные формы каждой статьи в соответствии с грамматическими атрибутами, такими как пол, число или случай, или в соответствии с соседними звуками.

К этому

статью (сокращенно АРТ) слово (префикс или суффикс), который используется вместе с существительным, чтобы указать тип ссылки, вносимый существительного. Статьи определяют грамматическую определенность существительного,

Так что это не разрушает базу данных, хватая текст длиной 100 000 слов. Мне нужны только первые 100

+0

Это для базы данных SQL, правильно? Не Postgres или MySQL? – dizzyf

+0

SQLAlchemy не выполняет какие-либо функции, перечисленные вами. 'func' является общим (с некоторой поддержкой переносимости) и создает любое выражение функции SQL, которое вы выбрасываете на него. Какая БД вы используете, и имеет ли она функцию 'mid', которую вы хотите использовать? Также, если у вас есть ошибка, включите ее и полную трассировку. –

+0

Из документации «Любое имя может быть присвоено функции func. Если имя функции неизвестно SQLAlchemy, оно будет отображаться точно так же, как есть». –

ответ

3

Это не имеет никакого отношения к функции mid. Сообщение об ошибке говорит 'BaseQuery' object is not callable. Где вы звоните BaseQuery? Здесь:

Item.query(...) 

Правильное колдовство является:

db.session.query(func.mid(...)) 

или

Item.query.with_entities(func.mid(...)) 
+0

OperationalError: (sqlite3.OperationalError) нет такой функции: mid [SQL: u'SELECT mid (items.title,?,?) LIKE? AS anon_1 \ nFROM items \ n LIMIT? OFFSET? '] [Параметры: (1, 3,'% e% ', 10, 0)] – Anekdotin

+1

SQLite не имеет 'mid'. Он имеет ['substr'] (https://www.sqlite.org/lang_corefunc.html#substr). –

+0

Item.query без (func.mid()) работает, но он возвращает огромное количество данных из столбца, а я хочу только между x и y – Anekdotin

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