2

djangoクエリセットでwithステートメントを使用することは可能ですか? 追加のパラメーターのようなもの。私は .raw を使用できましたが、これが方法であるかどうか疑問に思っていました (おそらく Query クラスまたは他のルートをオーバーライドすることにより)

参考までに、これは select ステートメントの前に置く必要があります。

そう:

with blah as (select * from table)

select * from blah where blah.column is not null
4

1 に答える 1

0

これは私がそれをした方法です:

    clone = kwargs.get('clone')
    if clone:
        pre_query = str(clone.query)
        pre_query = pre_query.replace('`','"')
    else:
        qs = clone.get_query_set()
        pre_query = str(qs.query)
        pre_query = pre_query.replace('`','"')

    sql = "\
    with etext as ({pre_query}),\
    words as ( \
    select lower(regexp_split_to_table(element_text , E'\\\\W+')) as word \
    from etext \
    ), \
    word_lex as ( select word, count(*) as cnt,\
    to_tsvector('english', COALESCE(word,'')) as t \
    from words \
    group by 1 order by %s desc ) \
    select * from word_lex WHERE \
    t != '' ".format(pre_query=pre_query)
    limit = kwargs.get('limit')
    order_by = kwargs.get('order_by')
    if limit != None:
        sql += 'limit {limit}'.format(limit=limit)
    if order_by != None:
        sql = sql %(order_by)
    else:
        sql = sql %('cnt')

    return custom_sql(sql)

基本的に、私はdjangoによって生成されたSQL全体を使用して、サブクエリを使用して別のSQLを作成しました。そこから、それを後続のクエリで使用しました。

于 2012-07-31T19:01:35.620 に答える