代码之家  ›  专栏  ›  技术社区  ›  pleasedontbelong

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

  •  6
  • pleasedontbelong  · 技术社区  · 15 年前

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

    SELECT * FROM search_client('something')
    

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

    有什么想法吗??谢谢你的时间!

    3 回复  |  直到 15 年前
        1
  •  2
  •   Steve Jalim    15 年前

    raw() ORM method 执行自定义SQL,但返回Django模型。如果不是这样,您仍然可以通过defaultqueryset上的extra()方法执行SQL,并将其注入到一个自定义方法中,以获取真正的ORM记录,或者创建新的临时对象

        2
  •  3
  •   Benjamin Wohlwend    15 年前

    如果你的目标是一个功能齐全的搜索引擎,看看 django-haystack

    raw 方法可能有效:

    qs = MyModel.objects.raw("SELECT * FROM search_client('something')")
    
        3
  •  -1
  •   S.Lott    15 年前

    首先,你可能不想这么做。你有证据证明你的数据库功能是正确的吗 事实上

    首先在Python中实现这个。如果可以证明Python实现确实是事务中最慢的部分,那么可以尝试使用存储过程。

    第二,你有 extra Django提供的方法。

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

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

    推荐文章