【Python百日进阶-Web开发-Peewee】Day278 - SQLite 扩展(三)

这篇具有很好参考价值的文章主要介绍了【Python百日进阶-Web开发-Peewee】Day278 - SQLite 扩展(三)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

12.2.7 class JSONPath

class JSONPath(field[, path=None])

参数:
field ( JSONField ) – 我们打算访问的字段对象。
path ( tuple ) – 组成 JSON 路径的组件。
一种方便的 Pythonic 表示 JSON 路径的方式,用于 JSONField.

该JSONPath对象实现__getitem__,累积路径组件,它可以将其转换为相应的 json-path 表达式。

getitem(项目)
参数: 物品– 访问子键键或数组索引。
返回: aJSONPath代表新路径。
访问 JSON 数据中的子键或数组索引。返回一个 JSONPath对象,该对象公开了用于读取或修改 JSON 对象的特定部分的便捷方法。

例子:

# If metadata contains {"tags": ["list", "of", "tags"]}, we can
# extract the first tag in this way:
first_tag = Post.metadata['tags'][0]
query = (Post
         .select(Post, first_tag.alias('first_tag'))
         .order_by(first_tag))

set(value[, as_json=None])

参数:
value – 标量值、列表或字典。
as_json ( bool ) – 强制将值视为 JSON,在这种情况下,它将预先在 Python 中序列化为 JSON。默认情况下,列表和字典被视为要序列化的 JSON,而字符串和整数则按原样传递。
在 JSON 数据中的给定位置设置值。

使用 json1 扩展中的json_set()函数。

update(value)

参数: 数据– 一个标量值、列表或字典,用于与 JSON 数据中给定位置的数据合并。要删除特定键,请将该键设置None为更新的数据中。
使用 RFC-7396 MergePatch 算法将新数据合并到 JSON 值中,以data针对列数据应用补丁(参数)。MergePatch 可以添加、修改或删除 JSON 对象的元素,这意味着它是和update()的通用替换。MergePatch 将 JSON 数组对象视为原子对象,因此不能附加到数组,也不能修改数组的单个元素。set()remove()update()

有关更多信息和示例,请参阅 SQLite json_patch() 函数文档。

remove()

删除存储在 JSON 数据中给定位置的数据。

使用 json1 扩展中的json_type函数。

json_type()

返回一个字符串,该字符串标识存储在 JSON 数据中给定位置的值的类型。

返回的类型将是以下之一:

  • object
  • array
  • integer
  • real
  • true
  • false
  • text
  • null <– 字符串“null”表示实际的 NULL 值
  • NULL <– 实际的 NULL 值表示未找到路径
    使用 json1 扩展中的json_type 函数。

length()

返回存储在 JSON 数据中给定位置的数组的长度。

使用 json1 扩展中的json_array_length 函数。

children()

在给定位置公开 JSON 对象的直接后代的表值函数。另请参阅JSONField.children()。

tree()

以递归方式在给定位置公开 JSON 对象的所有后代的表值函数。另请参阅JSONField.tree()。

12.2.8 class SearchField

class SearchField([unindexed=False[, column_name=None]])

用于表示全文搜索虚拟表的模型上的列的字段类。全文搜索扩展禁止对列指定任何类型或约束。此行为由 强制执行 SearchField,如果尝试任何与全文搜索扩展不兼容的配置,则会引发异常。

文档搜索索引的示例模型(时间戳存储在表中,但其数据不可搜索):

class DocumentIndex(FTSModel):
    title = SearchField()
    content = SearchField()
    tags = SearchField()
    timestamp = SearchField(unindexed=True)

match(term)

参数: term( str ) – 全文搜索查询/术语
返回: aExpression对应于MATCH 运算符。
Sqlite 的全文搜索支持搜索整个表,包括所有索引列,或搜索单个列。该 match()方法可用于将搜索限制为单个列:

class SearchIndex(FTSModel):
    title = SearchField()
    body = SearchField()

# Search *only* the title field and return results ordered by
# relevance, using bm25.
query = (SearchIndex
         .select(SearchIndex, SearchIndex.bm25().alias('score'))
         .where(SearchIndex.title.match('python'))
         .order_by(SearchIndex.bm25()))

要改为搜索所有索引列,请使用以下 FTSModel.match()方法:

# Searches *both* the title and body and return results ordered by
# relevance, using bm25.
query = (SearchIndex
         .select(SearchIndex, SearchIndex.bm25().alias('score'))
         .where(SearchIndex.match('python'))
         .order_by(SearchIndex.bm25()))

highlight(left ,right )

参数:
left ( str ) – 高亮的开始标签,例如’
right ( str ) – 高亮的结束标签,例如’

使用MATCH运算符执行搜索时,FTS5 可以返回给定列中突出显示匹配的文本。

# Search for items matching string 'python' and return the title
# highlighted with square brackets.
query = (SearchIndex
         .search('python')
         .select(SearchIndex.title.highlight('[', ']').alias('hi')))

for result in query:
    print(result.hi)

# For example, might print:
# Learn [python] the hard way

snippet(left ,right ,over_length=‘…’,max_tokens=16 )

参数:
left ( str ) – 高亮的开始标签,例如’
right ( str ) – 高亮的结束标签,例如’

over_length ( str ) – 当片段超过最大标记数时要添加或附加的文本。
max_tokens ( int ) – 返回的最大令牌,必须是 1 - 64。
使用MATCH运算符执行搜索时,FTS5 可以返回带有包含给定列中突出显示的匹配项的片段的文本。

# Search for items matching string 'python' and return the title
# highlighted with square brackets.
query = (SearchIndex
         .search('python')
         .select(SearchIndex.title.snippet('[', ']').alias('snip')))

for result in query:
    print(result.snip)

class VirtualModel

用于表示虚拟表的模型类。默认元数据设置略有不同,以匹配虚拟表经常使用的设置。

元数据选项:

arguments- 传递给虚拟表构造函数的参数。
extension_module- 用于虚拟表的扩展名。
options- 在虚拟表中应用的设置字典
构造函数。
primary_key- 默认为False,表示没有主键。
这些都以以下方式组合在一起:

CREATE VIRTUAL TABLE <table_name>
USING <extension_module>
([prefix_arguments, ...] fields, ... [arguments, ...], [options...])

12.2.9 class FTS5Model

class FTS5Model

与FTS5 全文搜索扩展VirtualModel一起使用的子类。

FTS5Model 子类应该正常定义,但是有一些警告:

  • FTS5 明确禁止在列上指定任何约束、数据类型或索引。因此,所有列都必须是SearchField.
  • FTS5 模型包含一个rowid由 SQLite 自动创建和管理的字段(除非您选择在模型创建期间显式设置它)。此列的查找快速而有效。
  • 不支持字段索引和多列索引。
    该FTS5扩展附带了 BM25 排名功能的内置实现。因此,searchandsearch_bm25方法已被覆盖以使用内置排名函数而不是用户定义的函数。

classname fts5_installed()

返回一个布尔值,指示是否安装了 FTS5 扩展。如果未安装,将尝试加载扩展。

classmethod search(term[, weights=None[, with_score=False[, score_alias=‘score’]]])

参数:文章来源地址https://www.toymoban.com/news/detail-699724.html

  • term ( str ) – 要使用的搜索词。
  • weights – 列的权重列表,根据列在表中的位置排序。或者,以字段或字段名称为键并映射到值的字典。
  • with_score – 分数是否应作为SELECT语句的一部分返回。
  • score_alias ( str ) – 用于计算排名分数的别名。这是您将用于访问分数的属性 if with_score=True。
  • explicit_ordering ( bool ) – 使用完整的 SQL 函数来计算排名,而不是简单地在 ORDER BY 子句中引用分数别名。
    搜索术语并按匹配质量对结果进行排序的简写方式。该FTS5扩展提供了 BM25 算法的内置实现,用于按相关性对结果进行排名。

更高的分数对应于更好的匹配。

# Simple search.
docs = DocumentIndex.search('search term')
for result in docs:
    print(result.title)

# More complete example.
docs = DocumentIndex.search(
    'search term',
    weights={'title': 2.0, 'content': 1.0},
    with_score=True,
    score_alias='search_score')
for result in docs:
    print(result.title, result.search_score)

classname search_bm25(term[, weights=None[, with_score=False[, score_alias=‘score’]]])

与FTS5,search_bm25()方法相同 search()。

classname rank([col1_weight , col2_weight…coln_weight])

参数: col_weight( float ) - (可选) 赋予模型第 i列的权重。默认情况下,所有列的权重为1.0.
生成一个表达式,该表达式将使用BM25 算法计算并返回搜索匹配的质量。该值可用于对搜索结果进行排序,分数越高,匹配越好。

该rank()函数接受允许您为各个列指定权重的可选参数。如果未指定权重,则认为所有列都具有同等重要性。

query = (DocumentIndex
         .select(
             DocumentIndex,
             DocumentIndex.rank().alias('score'))
         .where(DocumentIndex.match('search phrase'))
         .order_by(DocumentIndex.rank()))

for search_result in query:
    print(search_result.title, search_result.score)

笔记
上面的代码示例等价于调用 search()方法:

query = DocumentIndex.search('search phrase', with_score=True)
for search_result in query:
    print(search_result.title, search_result.score)

classname bm25([col1_weight , col2_weight…coln_weight])

因为 FTS5 提供了对 BM25 的内置支持,所以 bm25()方法与方法相同 rank()。

classname VocabModel([table_type=‘row’|‘col’|‘instance’[,table_name=None]])

参数:

  • table_type ( str ) – ‘row’、‘col’ 或 ‘instance’。
  • table_name – 词汇表的名称。如果未指定,将为“fts5tablename_v”。
    生成适合访问 FTS5搜索索引对应的词汇表的模型类。

到了这里,关于【Python百日进阶-Web开发-Peewee】Day278 - SQLite 扩展(三)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Day 278/300 移动版 播放视频全屏退出 导致页面错乱

    1、移动版 播放视频全屏退出 导致页面错乱; 2、放大缩小后,页面会错乱; 使用了rem适配,但是基准的页面值不准确导致的。 window.innerWidth 不准确 需要换为 document.documentElement.clientWidth

    2024年02月12日
    浏览(31)
  • Python Web开发记录 Day1:HTML

    名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 创作者:Code_流苏(CSDN) (一个喜欢古诗词和编程的Coder😊) 一、HTML 1、前端引入和HTML标签 ①前端引入 安装fllask 咱们的网站与别人的不一样: Flask框架为了让咱们写标签方便,支持将字符串写入到文件里面

    2024年02月21日
    浏览(48)
  • Python Web开发记录 Day7:Django(Web框架) part 1

    名人说:莫道桑榆晚,为霞尚满天。——刘禹锡(刘梦得,诗豪) 创作者:Code_流苏(CSDN) (一个喜欢古诗词和编程的Coder😊) 在当今迅速发展的互联网时代,开发高效、安全且可扩展的网站变得越来越重要。Python语言因其简洁的语法和强大的功能而广受欢迎,而Django则是P

    2024年03月11日
    浏览(67)
  • 百日刷题计划 ———— DAY1

    给出平面坐标上不在一条直线上三个点坐标 ( x 1 , y 1 ) , ( x 2 , y 2 ) , ( x 3 , y 3 ) (x_1,y_1),(x_2,y_2),(x_3,y_3) ( x 1 ​ , y 1 ​ ) , ( x 2 ​ , y 2 ​ ) , ( x 3 ​ , y 3 ​ ) ,坐标值是实数,且绝对值不超过 100.00,求围成的三角形周长。保留两位小数。 对于平面上的两个点 ( x 1 , y 1 ) , ( x 2

    2024年02月15日
    浏览(36)
  • 【100天精通python】Day47:python网络编程_Web开发:web服务器,前端基础以及静态服务器

    目录 1  网络编程与web编程 1.1 网络编程 1.2 web编程  1.3 前后端交互的基本原理/

    2024年02月11日
    浏览(52)
  • Python 进阶语法:switch语句扩展

    switch 语句是一种多分支选择结构,用于基于不同的情况执行不同的代码块。它通常用于处理多个明确的、互斥的条件,每个条件对应一个 case 子句。与 if-else 语句相比, switch 语句在处理多个明确值的情况时更加直观和易读。 1.1  switch语句的语法 基本的 switch 语句语法如下:

    2024年04月28日
    浏览(45)
  • 百日筑基篇——python爬虫学习(一)

    百日筑基篇——python爬虫学习(一) 随着学习的深入,有关从各种不同的数据库中以及互联网上的海量信息,如何有选择性的爬取我们所需的数据以方便我们的数据分析工作,爬虫的学习是必要的。 Python爬虫是指使用Python编程语言编写的程序,通过模拟浏览器行为从网页中

    2024年02月13日
    浏览(52)
  • BCSP-玄子Java开发之Java Web编程CH011_Ajax交互扩展

    $.ajax( )$.get() $.post() $.getJSON() .load() …… 常用参数 参数 类型 说明 url String 必选,发送请求的地址 data PlainObject 或 String 发送到服务器的数据 success Function(PlainObject result, String textStatus, jqXHR jqxhr) 请求成功后调用的函数参数result:可选,服务器返回的数据 dataType String 预期服务器

    2024年02月11日
    浏览(54)
  • 2023年web前端开发之JavaScript进阶(一)

    接上篇博客进行学习,通俗易懂,详细 博客地址: 2023年web前端开发之JavaScript基础(五)基础完结_努力的小周同学的博客-CSDN博客 学习 作用域 、变量提升、 闭包 等语言特征,加深对 JavaScript 的理解,掌握变量赋值、函数声明的简洁语法, 降低代码的冗余度 。 理解作用域对程序

    2024年02月03日
    浏览(57)
  • chrom扩展开发配合百度图像文字识别实现自动登录(后端.net core web api)

    好久没做浏览器插件开发了,因为公司堡垒机,每次登录都要输入账号密码和验证码。太浪费时间了,就想着做一个右键菜单形式的扩展。 实现思路也很简单,在这里做下记录,方便下次开发参考。 manifest.json 也叫清单文件。 先简单看下配置: 上述配置基本包含了插件开发

    2024年02月11日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包