python 如何使用源生sql语句查询多个参数的情况

这是python中的一个查询:result_list=list(CrashLog.objects.raw('select*fromoms_crashlogwhere1=1... 这是python 中的一个查询:
result_list = list(CrashLog.objects.raw('select *
from oms_crashlog where 1=1 and (platform="" or platform=%s) and
(platform="" or product=%s)', params=params))

例如网上看到个这样的一个列子:
有选项参数 @age 并要查询 age= @age:
可书写为: and (@age is null or age= @age)
有选项参数 @name 并要查询 name = @name
可书写为: and (@name is null or name = @name)
这是别人的一个问题,我想问的时要是没有选项参数age但是有name,那这个该怎么写,在python中这个@也不能用不知道这个@时什么意思?
(另外我要查询的参数比较多,所以我想问,用你这种sql语句能将各种情况包含吗?能的话,怎么包含?)
网页post进来的数据
platform = request.POST['platform']
product = request.POST['product']
device = request.POST['device']
ip = request.POST['ip']
展开
 我来答
tim_spac
2015-02-13 · TA获得超过3628个赞
知道大有可为答主
回答量:1804
采纳率:100%
帮助的人:1997万
展开全部
# coding: utf-8
# an example
"""
-- the SQL Server storage process:
drop procedure proc_getconflist 
go
create procedure proc_getconflist 
      @customer char(6)
    , @servicekey varchar(16) = NULL 
    , @dt_bgn datetime = NULL 
    , @dt_end datetime = NULL 
as begin
    select billsumidx as idx
    from conf_billsum
    where 1=1
    and sumtypeid=1
    and isnull(@customer, customercode) = customercode
    and isnull(@servicekey, servicekey) = servicekey
    and isnull(@dt_bgn, begintime) < endtime
    and begintime < isnull(@dt_end, endtime)
end
go

"""

import pymssql

conn = pymssql.connect(
        host="192.168.70.7",
        user='pyquery',
        password='Qpery',
        database='gb201412',
        )
curr = conn.cursor()
curr.execute("exec proc_getconflist %s, %s, %s, %s",
        ('990003', None, None, None))
for idx, in curr:
    print idx
curr.close()
conn.close()
追问
这个时django自带的查询,但是条件多的话,要写很多if else 判断,你上面的写的我暂时没有接触过,有点不太懂.

if platform and product and device:
result_list = CrashLog.objects.filter(platform=platform, product=product, device=device)
追答
# django不了解,似乎可以这样试试看:
result_list = list(CrashLog.objects.raw(
    ''' select * 
        from oms_crashlog
        where 1=1
        and (isnull(%s, platform)=platform)
        and (isnull(%s, product)=product)
        and (isnull(%s, device)=device)
        and (isnull(%s, ip)=ip)
        ''',
    params=map(request.POST.get, (
            'platform',
            'product',
            'device',
            'ip'))
    ))
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式