12Django的原生数据库操作方法
2021/11/30 19:09:54
本文主要是介绍12Django的原生数据库操作方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
原生数据库操作方法一:
查询:MyModel.objects.raw()
语法:MyModel.objects.raw(SQL语句,拼接参数)
返回值:RawQuerySet集合对象【只支持基础操作,比如循环】
Django官方一般不建议直接使用SQL做查询操作,容易被注入SQL,例如下面这个案例:
#模拟sql注入获取所有用户: def sqltest(request,user_id): sql = 'select * from user where id=%s'%(user_id) f = User.objects.raw(sql) for i in f: print(i.name) sqltest(1 or 1=1)
解决上面的这个漏洞的办法就是不要自己拼接sql语句,而是用传参的方式,例如:
#自己拼接(危险) Book.objects.raw('selece * from bookstore_book where id=%s'%('1 or 1=1')) #传参(安全): 让Django帮我们传参,Django会帮我们把危险的字符转义掉 Book.objects.raw('selece * from bookstore_book where id=%s,['1 or 1=1']'
原生数据库操作方法二(cursor):
直接使用游标操作数据库,为了保证出现异常时能够释放游标cursor资源,推荐使用with语句创建操作
#方法: from django.db import connection with connection.cursor() as cur: cur.execute('SQL语句'.'拼接参数')
示例:
from django.db import connection #更新表bookstore_book里的字段pub为XXX出版社 with connection.cursor() as cur: cur.execute('update bookstore_book set pub_house="XXX出版社" where id=10;') #删除id=1的一条记录 with connection.cursor() as cur: cur.execute('delete from bookstore_book where id=10;')
这篇关于12Django的原生数据库操作方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24MongoDB资料:新手入门完全指南
- 2024-12-20go-zero 框架的 RPC 服务 启动start和停止 底层是怎么实现的?-icode9专业技术文章分享
- 2024-12-19Go-Zero 框架的 RPC 服务启动和停止的基本机制和过程是怎么实现的?-icode9专业技术文章分享
- 2024-12-18怎么在golang中使用gRPC测试mock数据?-icode9专业技术文章分享
- 2024-12-15掌握PageRank算法核心!你离Google优化高手只差一步!
- 2024-12-15GORM 中的标签 gorm:"index"是什么?-icode9专业技术文章分享
- 2024-12-11怎么在 Go 语言中获取 Open vSwitch (OVS) 的桥接信息(Bridge)?-icode9专业技术文章分享
- 2024-12-11怎么用Go 语言的库来与 Open vSwitch 进行交互?-icode9专业技术文章分享
- 2024-12-11怎么在 go-zero 项目中发送阿里云短信?-icode9专业技术文章分享
- 2024-12-11怎么使用阿里云 Go SDK (alibaba-cloud-sdk-go) 发送短信?-icode9专业技术文章分享