python - 提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。TrigramSimilarity Django
问题描述
我正在尝试使用TrigramSimilarity
. 我已经 pg_trgm
在 PostgreSQL 中激活了扩展。并添加django.contrib.postgres
到我安装的应用程序中。但是当我尝试查询时
blog.objects.annotate(similarity=TrigramSimilarity('name', 'abc'),).filter(similarity__gt=0.3).order_by('-similarity')
但它给了我一个错误
psycopg2.ProgrammingError:函数相似度(字符变化,未知)不存在第 1 行:...others_2", "blog_mod", SIMILARITY... ^ 提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。
为什么会发生此错误。请帮我。
解决方案
该错误表明尚未安装扩展程序。我不知道为什么会这样。可能您没有在用于 django 的数据库中安装扩展?
可以从您的 django 代码执行原始 sql 查询。这将确保您以正确的数据库/模式为目标。
from django.db import connection
with connection.cursor() as cursor:
cursor.execute('CREATE EXTENSION IF NOT EXISTS pg_trgm')
您还可以使用 Django 的自定义TrigramExtension
迁移。创建扩展查询是一样的。但是,如果您在还需要启用 pg_trgm 的测试数据库上运行集成测试,那么迁移是一个好主意。
https://docs.djangoproject.com/en/2.1/ref/contrib/postgres/operations/#database-migration-operations
推荐阅读
- powershell - 有没有可以添加到“.bat”文件中的标签来停止显示命令窗口
- c++ - 这个操作符方法有什么作用?
- google-apps-script - Adsense 报告 Google 表格
- boolean - 如何在表单加载的表中将是/否值设置为否以注销所有用户
- c++ - 任何人都可以像我 5 岁那样解释变量如何在函数上工作吗?
- android - 为什么 ppoll() 不等待我在 Android Pie 中的延迟?
- python - Pandas:读取 CSV 时出现强制错误
- scala - scala中错误的顶级声明声明
- visual-studio-code - 如何关闭 ESLint 规则以便代码编译?
- python - 如何为 pandas.cut 函数定义(和命名)间隔?