首页 > 数据库 >Django中ORM如何执行原生sql语句操作数据库

Django中ORM如何执行原生sql语句操作数据库

时间:2023-11-14 10:37:22浏览次数:41  
标签:res Django cursor ORM sql print where id select

django中的ORM提供的操作功能有限,在模型提供的查询API不能满足实际工作需要时,可以在ORM中直接执行原生sql语句。

Django 提供两种方法使用原生SQL进行查询:一种是使用raw()方法,进行原生SQL查询并返回模型实例;另一种是完全避开模型层,直接执行自定义的SQL语句。另外就是用extra方法。

1.raw方法

# row方法:(掺杂着原生sql和orm来执行的操作)
res = CookBook.objects.raw('select id as nid  from  epos_cookbook  where  id>%s', params=[1, ])
print(res.columns) # ['nid']
print(type(res)) # <class 'django.db.models.query.RawQuerySet'>
 
# 在select里面查询到的数据orm里面的要一一对应
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.create_date)
    print(i)

2.connection方法

from django.db import connection, connections
# 需要配置数据库
# cursor=connection['default'].cursor() 
cursor = connection.cursor()  
# 不传参数的情况
cursor.execute("""select  * from epos_cookbook""")
 
# 为原生sql语句设置参数的情况
# cursor.execute("""select  * from  epos_cookbook   where   id=%s""",[2,]) # 2 是 id
# cursor.execute("""select  * from  api_userinfo   where   id=%s"""%1)
 
# 防止注入攻击
cursor.execute("select  * from  epos_cookbook   where   id=%s", params=[1, ])
# row=cursor.fetchone()
# row=cursor.fetchmany()
row = cursor.fetchall()  ##拿到全部的数据
 
print(row)

3.extra方法

# (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)

参考博客:https://www.cnblogs.com/davis12/p/14611157.html

标签:res,Django,cursor,ORM,sql,print,where,id,select
From: https://www.cnblogs.com/piggthird/p/17831038.html

相关文章

  • wordpress SQL
     UPDATEwp_postsSETpost_content=REPLACE(post_content,"192.168.120.126:8000","计算机名:8000")  WHEREid=10 ;   修改ip地址后,导致图片失效 报语法错,跟mysql版本没有关系。   更改ip和切换主题都会导致文章排版和图片问题。有些主题是用markdown,有......
  • SQLserver中的递归如何实现
    在SQLServer中,可以使用递归CTE(通用表达式)来实现递归查询。CTE(通用表达式)是一种临时命名结果集,它只存在于查询语句的执行过程中。CTE可以在一个SELECT,INSERT,UPDATE或DELETE语句中使用,并且可以在同一个查询中递归引用自身。这使得递归查询成为可能。下面是一个使用递归CTE的示例:......
  • MySQL学习(16)事务隔离级别
    事务隔离级别前言一次事务的执行,就是一次状态的转换。事务执行后,必须从一个一致性状态转换到下一个一致性状态,如果事务发生中止,也要回滚到最初的一致性状态。什么是事务隔离级别系统通过一些方法,使得并发执行的事务按照一定的顺序单独执行,或者最终执行的效果和单独执行一样。......
  • MySQL常用的字符串函数
    MySQL常用的字符串函数有:   1,CONCAT(str1,str2,…):将多个字符串连接在一起。selectCONCAT('aa','bb')//返回aabb  2,UPPER(str):将字符串转换为大写。selectUPPER('aabb')//返回大写的AABB   3,LOWER(str):将字符串转换为小写。selectLOWER(......
  • Cost Aggregation with Transformers for Sparse Correspondence-读书笔记
    CostAggregationwithTransformersforSparseCorrespondence:2022背景:该论文结合了SuperGlue和CATs,将里面所有手工制作的部分都代替了。将CATs引入该模型,用Transformer取代手工制作的成本聚合方法,用于具有自关注层全局接受域的可学习成本聚合。(PS:成本聚合:成本聚合是指在立......
  • MySQL中常见的数学函数
    1.函数用于求绝对值abs() 2.函数返回小于或等于x的最大整数 floor(x) 3.函数是返回0-1的随机数 rand() 4.函数用于返回圆周率 PI() 5.函数返回x保留到小数点后y位的值truncate(x,y) 6.函数对x四舍五入,round(x,y)返回x保留到y位,截断时进行四舍五入处理 round(......
  • Django4
    路由曾无名分组有名分组反向解析无名分组反向解析有名分组反向解析路由分发伪静态的概念了解名称空间了解虚拟环境了解diango1.x和django2.x的区别视图层:三板斧序列化模块(dumps  JsonResponse)form表单上传文件FBV (functionbasedview) 和CBV......
  • mysql函数(三)之常见数学函数
    1、format(x,y)函数功能是将一个数字x,保留y位小数,并且整数部分用逗号分隔千分位,小数部分进行四舍五入,使用示例如下: 2、abs(x);sqrt(x);mod(x,y)①、abs();求一个数的绝对值;absolute②、sqrt();求一个数的平方根。sqrt是sqruar(平方,矩形),root(根)的缩写。③、mod(x,y)......
  • 如何在 Python 中执行 MySQL 结果限制和分页查询
    PythonMySQL限制结果限制结果数量示例1:获取您自己的Python服务器选择"customers"表中的前5条记录:importmysql.connectormydb=mysql.connector.connect(host="localhost",user="您的用户名",password="您的密码",database="我的数据库"......
  • 如何在 Python 中执行 MySQL 结果限制和分页查询
    PythonMySQL限制结果限制结果数量示例1:获取您自己的Python服务器选择"customers"表中的前5条记录:importmysql.connectormydb=mysql.connector.connect(host="localhost",user="您的用户名",password="您的密码",database="我的数据库"......