ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

12Django的原生数据库操作方法

2021-11-30 12:02:39  阅读:201  来源: 互联网

标签:原生 12Django cur 操作方法 cursor objects bookstore where id


原生数据库操作方法一:

查询: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,cur,操作方法,cursor,objects,bookstore,where,id
来源: https://www.cnblogs.com/tyjs09/p/15623554.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有