在Django中使用原生Sql

在Django中使用原生Sql主要有以下几种方式:
一:extra:结果集修改器,一种提供额外查询参数的机制
二:raw:执行原始sql并返回模型实例
三:直接执行自定义Sql(这种方式完全不依赖model,前两种还是要依赖于model)
实例:
使用extra:
  1:Book.objects.filter(publisher__name='广东人员出版社').extra(where=['price>50'])
  Book.objects.filter(publisher__name='广东人员出版社',price__gt=50)
 
  2:Book.objects.extra(select={'count':'select count(*) from hello_Book'})
    在Book表中增加了count字段可被调用
使用raw:
  Book.objects.raw('select * from hello_Book')
 
  自定义sql:
  Book.objects.raw("insert into hello_author(name) values('测试')")
  rawQuerySet为惰性查询,只有在使用时生会真正执行
 
执行自定义sql:
  from django.db import connection
  cursor=connection.cursor()
 #插入操作
  cursor.execute("insert into hello_author(name) values('张三')")
 #更新操作
  cursor.execute('update hello_author set name='abc' where name='bcd'')
 #删除操作
  cursor.execute('delete from hello_author where name='abc'')
 #查询操作
  cursor.execute('select * from hello_author')
  raw=cursor.fetchone() #返回结果行游标直读向前,读取一条
  cursor.fetchall() #读取所有

2. 在Django的ORM中,想使用事务操作时,要先导入一个Django的内置模块

   from django.db import transaction
  def index(request):
        from django.db import transaction try: with transaction.atomic(): models.Userinfo.objects.create(username="python001",email="[email protected]") models.Group.objects.create(title="python002") except Exception as e: return HttpResponse("出现错误....") return HttpResponse("ok")
在Django中使用原生Sql主要有以下几种方式:
一:extra:结果集修改器,一种提供额外查询参数的机制
二:raw:执行原始sql并返回模型实例
三:直接执行自定义Sql(这种方式完全不依赖model,前两种还是要依赖于model)
实例:
使用extra:
  1:Book.objects.filter(publisher__name='广东人员出版社').extra(where=['price>50'])
  Book.objects.filter(publisher__name='广东人员出版社',price__gt=50)
 
  2:Book.objects.extra(select={'count':'select count(*) from hello_Book'})
    在Book表中增加了count字段可被调用
使用raw:
  Book.objects.raw('select * from hello_Book')
 
  自定义sql:
  Book.objects.raw("insert into hello_author(name) values('测试')")
  rawQuerySet为惰性查询,只有在使用时生会真正执行
 
执行自定义sql:
  from django.db import connection
  cursor=connection.cursor()
 #插入操作
  cursor.execute("insert into hello_author(name) values('张三')")
 #更新操作
  cursor.execute('update hello_author set name='abc' where name='bcd'')
 #删除操作
  cursor.execute('delete from hello_author where name='abc'')
 #查询操作
  cursor.execute('select * from hello_author')
  raw=cursor.fetchone() #返回结果行游标直读向前,读取一条
  cursor.fetchall() #读取所有

2. 在Django的ORM中,想使用事务操作时,要先导入一个Django的内置模块

   from django.db import transaction
  def index(request):
        from django.db import transaction try: with transaction.atomic(): models.Userinfo.objects.create(username="python001",email="[email protected]") models.Group.objects.create(title="python002") except Exception as e: return HttpResponse("出现错误....") return HttpResponse("ok")

猜你喜欢

转载自www.cnblogs.com/l-jie-n/p/9941865.html