将 Raw SQL 转换为 Django ORM 代码,可能性

Convert Raw SQL to Django ORM code , possibility

是否可以仅使用 Django ORM 执行类似的操作?

        with connection.cursor() as cursor:
            cursor.execute(
                """SELECT word FROM ts_stat(
                'SELECT to_tsvector(''simple'', description) FROM api_product');""",
                #[source, ]
            )
            words_in_product_model = frozenset(
                more_itertools.one(word) for word in cursor.fetchall()

db-Postgres 11 谢谢

SearchVector class 确实使用了 to_tsvector 但我认为 ts_stat 不可用。

最初查看您的问题时,我完全忽略了 ts_stat 采用字符串而不是常规结果这一事实。这显着改变了实现方式,我不确定实现它的最佳方式是什么......但我会给你一个简单的技巧来解决它,使用查询集上的 raw 方法。

from django.db import models


class TsStat(models.Model):
    word = models.CharField(max_length=256)
    ndoc = models.PositiveIntegerField()
    nentry = models.PositiveIntegerField()

    class Meta:
        managed: False



vector_query = models.ApiProduct.objects.annotate(
    search=Func(Value('simple'), 'description', function='to_tsvector'),
).values('search')

results = TsStat.objects.raw('SELECT * FROM ts_stat(%s)' % vector_query.query)

但这显然未经测试,语法可能略有不同,您可能必须立即包含 SearchVector 而不是通过过滤器。