Python Sqlalchemy子查询

Python Sqlalchemy子查询,python,sql,sqlalchemy,flask-sqlalchemy,Python,Sql,Sqlalchemy,Flask Sqlalchemy,我正在我的公司使用flask和sqlalchemy(sqlite)开发一个用python编写的internel搜索引擎。我现在的问题是我想去 A.)查询描述字段的一定数量的信息 B.)最好在50个字符之前和之后查询 非常类似于谷歌的链接字段。如果您搜索某个内容,它将返回包含100个字符的链接 我在阅读文档时发现sqlalchemy中没有mid()函数。我还从这篇文章中注意到sqlalchemy只支持max、min和avg 函数的SQL文档 我试图实现一个查询,如 links = Item.q

我正在我的公司使用flask和sqlalchemy(sqlite)开发一个用python编写的internel搜索引擎。我现在的问题是我想去

A.)查询描述字段的一定数量的信息 B.)最好在50个字符之前和之后查询

非常类似于谷歌的链接字段。如果您搜索某个内容,它将返回包含100个字符的链接

我在阅读文档时发现sqlalchemy中没有mid()函数。我还从这篇文章中注意到sqlalchemy只支持max、min和avg

函数的SQL文档

我试图实现一个查询,如

links = Item.query(func.mid(Item.description, 0, 200).like('%helloworld%'))
我发布了sqlite的语法Substr,并尝试了 Item.query.filter(funct.substr(Item.description,0200)=='%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/Jinja代码:

 {% 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>
总体而言,我正在尝试对我们在列描述中查询的数据执行此操作:

示例文本:

冠词(缩写为ART)是一个词(前缀或后缀),与名词一起使用,表示该名词所指的类型。在一些语言中,文章规定了名词的语法定义,扩展到了数量或数字范围。英语中的冠词是和a/an,以及(在某些上下文中)一些。“An”和“a”是古英语“An”的现代形式,在盎格鲁方言中是数字“1”(在撒克逊方言中比较“on”),并作为数字“owan”流传到现代苏格兰。“on”(被诺曼人改称为“one”)和“an”都保留在现代英语中,“one”用作数字,“an”(“a”,在以辅音开头的名词之前)用作不定冠词

在许多语言中,冠词是一种特殊的词类,不能很容易地与其他词类组合在一起。在英语中,冠词通常被认为是一个更广泛的词类限定词的一部分,它结合了冠词和指示词(如“this”和“that”)

在使用冠词的语言中,除了一些例外,每个普通名词都有一定的确定性(例如,确定或不确定),就像许多语言用一定的语法数字(例如,单数或复数)来表达每个名词一样。每个名词都必须伴随冠词,如果有的话,对应于它的确定性,而缺少冠词(被认为是零冠词)本身就指定了某种确定性。这与其他形容词和限定词形成对比,它们通常是可选的。冠词的强制性使其成为许多英语语言中最常见的词之一,例如,最常见的词是the

冠词通常具有确定或不确定的特征。[2]一些冠词系统发达的语言可能会区分其他子类型。在每种类型中,根据语法属性,如性别、数字或大小写,或根据相邻的发音,语言可能有每一篇文章的不同形式

到此

冠词(缩写为ART)是一个词(前缀或后缀),与名词一起使用,表示该名词所指的类型。文章规定了名词的语法定义


因此,它不会通过抓取10万字长的文本来破坏数据库。我只需要前100个

这与
mid
功能无关。错误消息说,
'BaseQuery'对象不可调用。
您在哪里调用
BaseQuery
?在这里:

Item.query(...)
正确的咒语是:

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


这是用于SQL数据库的,对吗?不是Postgres或MySQL?SQLAlchemy不会“实现”您列出的任何函数
func
是通用的(具有一些可移植性支持),并生成您抛出的任何SQL函数表达式。您使用的数据库是什么?它是否具有您希望使用的
mid
功能?此外,如果您有错误,请包括它和完整的回溯。从文档中“任何名称都可以指定给func。如果SQLAlchemy不知道函数名称,则它将按原样呈现。”OperationalError:(sqlite3.OperationalError)没有这样的函数:mid[SQL:u'选择mid(items.title,,?)类似于?作为一个\n来自项目\n限制?偏移量?'][参数:(1,3,'%e%',10,0)]SQLite没有
mid
。它有.Item.query,但没有(func.mid())可以工作,但它从列中带回了大量数据,而我只想要在x和yd之间有人对它进行substr修复吗?似乎这是正确的路径
func.substr(…)
。阅读文档时要想一想:“任何名字都可以给func。”
db.session.query(func.mid(...))
Item.query.with_entities(func.mid(...))