当前位置: 首页 > news >正文

connection.cursor() 与 models.objects.filter

在 Django 中操作数据库时,connection.cursor() 和 models.objects.filter 是两种不同的方式,各有特点和适用场景:

  1. models.objects.filter (ORM 方式)

特点‌:

基于 Django 的 ORM(对象关系映射)框架,无需直接编写 SQL 语句。
支持链式调用,可结合 Q 对象实现复杂查询(如 OR 条件)。
自动处理数据库兼容性和安全性(如防 SQL 注入)。
返回的是 QuerySet 对象,支持惰性查询和分页优化。

示例‌:

python
Copy Code
from app.models import Blog
# 简单查询
blogs = Blog.objects.filter(name='test').order_by('-ctime')  
# 使用 Q 对象
from django.db.models import Q
blogs = Blog.objects.filter(Q(id=1) | Q(name__contains='django')):ml-citation{ref="5" data="citationList"}
  1. connection.cursor() (原生 SQL 方式)

特点‌:

直接执行原生 SQL 语句,适合复杂查询或 ORM 无法高效实现的场景。
需手动管理游标和连接,灵活性高但代码更底层。
需注意 SQL 注入风险,推荐使用参数化查询(如 cursor.execute(sql, [params]))。

示例‌:

python
Copy Code
from django.db import connection
with connection.cursor() as cursor:cursor.execute("SELECT * FROM blog_blog WHERE id = %s", [1])  rows = cursor.fetchall():ml-citation{ref="2,6" data="citationList"}

对比总结
对比项‌ models.objects.filter connection.cursor()
适用场景‌ 常规查询、ORM 支持的操作 复杂 SQL、性能优化需求
安全性‌ 自动防注入 需手动参数化处理
可维护性‌ 高(代码与数据库解耦) 低(依赖具体数据库语法)
性能优化‌ 支持 select_related 等优化 可直接优化 SQL 语句

建议‌:优先使用 ORM 方式,仅在 ORM 无法满足需求时使用原生 SQL。

相关文章:

  • [web]攻防世界 easyphp
  • [U-Net]DA-TRANSUNET
  • 前端数据库缓存
  • onnx注册cpu版flashattention
  • springboot基于hadoop的酷狗音乐爬虫大数据分析可视化系统(源码+lw+部署文档+讲解),源码可白嫖!
  • 自动化测试概念及常用函数篇 [软件测试 基础]
  • GIT 使用小记
  • C++ 类与对象(上):从基础定义到内存布局的深度解析
  • 直播预告 |【仓颉社区】第32期WORKSHOP
  • 02_java的运行机制以及JDKJREJVM基本介绍
  • 视频汇聚平台EasyCVR赋能高清网络摄像机:打造高性价比视频监控系统
  • Python基础语法:查看数据的类型type(),数据类型转换,可变和不可变类型
  • 如何使用无线远程控制模块来实现rs-485无线控制?
  • 4.24工作总结
  • 安全生产知识竞赛活动方案流程规则
  • Linux内核之struct pt_regs结构
  • Leetcode 34. 在排序数组中查找元素的第一个和最后一个位置
  • 虚拟机系统介绍
  • ZeroNet 地址生成器1.0
  • Redis的过期删除策略和内存淘汰策略
  • “雷公”起诉人贩子王浩文案开庭:庭审中不承认拐走川川
  • 国家卫健委:坚决反对美国白宫网站翻炒新冠病毒“实验室泄漏”
  • 张广智当选陕西省慈善联合会会长
  • 【社论】上海车展40年,见证了什么
  • 什么是中国好手艺?材美、工巧、器韵、时宜
  • 元宇宙之问|“AI+AR”融合或重新定义元宇宙发展路径