【问题标题】:SQL function in ORMORM中的SQL函数
【发布时间】:2026-02-02 08:20:08
【问题描述】:

我有 SQL Server、FreeTDS、Django 1.5.5。 SQL Server的全文搜索,需要用到Sql server的contains函数。

这将在 my_table 的 x_name 字段中搜索“mytext”。

select x_name from my_table where contains(x_name, 'mytext')

对于使用 ORM 进行操作,有 djorm-ext-expressions。

http://www.niwi.be/2012/10/07/sqlexpressions-and-functions-with-django/

如果 sql 函数只有一个参数,但包含两个参数:字段名称和文本。

生成Sql的Where语句如下:

MyTable.objects.where(Contains("x_name", "mytext"))
               .query.get_compiler("default").as_sql()

输出:

WHERE (contains("x_name"))', ('mytext',))

但它应该像这样输出:

WHERE (contains("x_name", 'mytext'))

有人知道怎么解决吗?

【问题讨论】:

  • 这看起来像是 ORM 中的一个错误。
  • 为此,我使用的是原始 sql,但 orm 会更好更安全。

标签: sql-server django django-orm


【解决方案1】:

我已经解决了这个问题:

MyTable.objects.where(RawExpression("contains(x_name, %s)", 'mytext'))

【讨论】: