django中的ORM提供的操作功能有限,在模型提供的查询API不能满足实际工作需要时,可以在ORM中直接执行原生sql语句。
Django 提供两种方法使用原生SQL进行查询:一种是使用raw()方法,进行原生SQL查询并返回模型实例;另一种是完全避开模型层,直接执行自定义的SQL语句。另外就是用extra方法。
1.raw方法
| |
| res = CookBook.objects.raw('select id as nid from epos_cookbook where id>%s', params=[1, ]) |
| print(res.columns) |
| print(type(res)) |
| |
| |
| res = CookBook.objects.raw("select * from epos_cookbook") |
| print(res) |
| for i in res: |
| print(i.create_date) |
| print(i) |
| |
| res = CookBook.objects.raw('select * from epos_cookbook where id>%s', params=[1, ]) |
| |
| print(res) |
| for i in res: |
| |
| print(i) |
2.connection方法
| from django.db import connection, connections |
| |
| |
| cursor = connection.cursor() |
| |
| cursor.execute("""select * from epos_cookbook""") |
| |
| |
| |
| |
| |
| |
| cursor.execute("select * from epos_cookbook where id=%s", params=[1, ]) |
| |
| |
| row = cursor.fetchall() |
| |
| print(row) |
| # (1,2) 必须两个以上 |
| # res = CookBook.objects.extra(select={"aaa": "cook_type = 1"}, where=['id in (1,2)', ]).values() |
| res = CookBook.objects.extra(select={"aaa": "cook_type = 1"}, where=['id in (1,2)', ]) |
| print(res) # <QuerySet [<CookBook: 鱼香肉丝>, <CookBook: 水煮鱼>]> |
| for r in res: |
| print(r) |
参考:http://www.voidcn.com/article/p-yauakmva-bxq.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现