从Django调用数据库函数的正确方法?

时间:2010-08-12 12:20:29

标签: django postgresql search function call

我正在使用postgresql和django进行全文搜索所以我创建了一个函数search_client(text),它返回一个客户列表。要从数据库中调用它,请使用以下内容:

SELECT * FROM search_client('something')

并且我不确定如何从django调用它。我知道我可以做类似

的事情
cursor = connection.cursor()
cursor.execute("SELECT * FROM search_client('something')")
result = cursor.fetchall()

但是这只会返回一个值列表,我想要一个对象列表,就像我使用“filter()”方法一样。

任何想法?谢谢你的时间!

3 个答案:

答案 0 :(得分:3)

如果您的目标是功能齐全的搜索引擎,请查看django-haystack。它摇滚。

至于你的问题,新的(Django 1.2)raw方法可能有效:

qs = MyModel.objects.raw("SELECT * FROM search_client('something')")

答案 1 :(得分:2)

如果您使用的是Django 1.2,则可以使用raw() ORM method执行自定义SQL,但可以返回Django模型。如果不是,您仍然可以通过默认QuerySet上的extra()方法执行SQL,并将其泵入自定义方法,然后再拉出真正的ORM记录,或者创建新的临时对象

答案 2 :(得分:0)

首先,您可能不想这样做。您是否有证据证明您的数据库功能实际更快?

首先在Python中实现它。当您可以证明您的Python实现确实是事务中最慢的部分时,那么您可以尝试存储过程。

其次,你在Django中有extra方法。

http://docs.djangoproject.com/en/1.2/ref/models/querysets/#django.db.models.QuerySet.extra

请注意,计算密集型数据库过程通常很慢。