orm和mysql_orm与mysql

一. orm执行原生sql语句

在模型查询API不够用的情况下,我们还可以使用原始的SQL语句进行查询。

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

1. 执行原生sql查询

raw()管理器方法用于原始的SQL查询,并返回模型的实例:

注意:raw()语法查询必须包含主键。

这个方法执行原始的SQL查询,并返回一个django.db.models.query.RawQuerySet 实例。 这个RawQuerySet 实例可以像一般的QuerySet那样,通过迭代来提供对象实例

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

raw()管理器方法用于原始的SQL查询,并返回模型的实例

ret= models.Book.objects.raw('select * from app01_book')print(ret)#

for i inret:print(i.id, i.title, i.commentNum)

原生SQL还可以使用参数,注意不要自己使用字符串格式化拼接SQL语句,防止SQL注入

d= {'commentNum': 'cn'}

ret= models.Book.objects.raw('select * from app01_book where id > %s', translations=d, params=[2,])for i inret:print(i.id, i.title, i.cn)

View Code

2. 直接执行自定义sql

有时候raw()方法并不十分好用,很多情况下我们不需要将查询结果映射成模型,或者我们需要执行DELETE、 INSERT以及UPDATE操作。在这些情况下,我们可以直接访问数据库,完全避开模型层。

我们可以直接从django提供的接口中获取数据库连接,然后像使用pymysql模块一样操作数据库

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

from django.db importconnection, connections

cursor=connection.cursor()

sql= 'select * from app01_book'cursor.execute(sql)

ret=cursor.fetchone()print(ret)

View Code

二.  Python脚本中调用Django环境(django外部脚本使用models)

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

if __name__ == '__main__':importos

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'manytable.settings')importdjango

django.setup()from app01 importmodels

books=models.Book.objects.all()print(books)

View Code

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值