我正在使用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()”方法一样。
任何想法?谢谢你的时间!
答案 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
请注意,计算密集型数据库过程通常很慢。