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']
展开
 我来答
bdwisyou7d
推荐于2016-06-23 · TA获得超过1.3万个赞
知道大有可为答主
回答量:3774
采纳率:81%
帮助的人:1074万
展开全部
用django的object就是为了快速开发。所以在设计之初就不允许复杂的查询,复杂的业务逻辑。

如果你设计的复杂,直接用sql,再多复杂都可以支持。

@age这东西是存贮过程里用的吧。这里用不着。

在python里,直接通过格式化字段串,组装成SQL再通过MysqlDb的cursor传递过去,然后fetch就可以了。

你的前面那段代码已经说的很明白了。你先看一看python的基本语法 。
追问
用cursor得到的是tuple类型,要是想在页面上达到分页,显示效果,还是raw方便,那么现在问题是用raw,也能达到你说的效果吗?之所以不用django的object是因为if else 太多,按我post进来的4条数据打个比方,怎么用一条sql语句写出来?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式