Django实现sql语句

Django中view模块操作数据库

1、模型的增删改查(ORM模块)

导入model模块中的表模型

1.1 all函数

比如:

from users.models import UserInfo
#查询所有数据,返回的是一个QuerySet关联集
data = UserInfo.object.all()

在这里是导入users模型文件下的models.py文件中的UserInfo表模型

1.2 get函数

get()获取的是指定条件符合数据,只有一条,且找不到就报错。

1.3 count函数

计数函数,返回的是数据的数目

1.4 filter函数(条件查询)

条件查询。(可以通过逗号,连接多个条件) 返回QuerySet查询集(可以遍历)

books = BookInfo.objects.filter(bookname__exact = '西游记') 
 # __exact 等于。 __exact 可以省略。 (__iexact 不区分大小写)

books = BookInfo.objects.filter(bookname__contains = '西')  
# __contains 包含。模糊查询。 (__icontains 不区分大小写)

books = BookInfo.objects.filter(bookname__endswith = '记')  
# __endswith 以..结尾。 __startswith 以..开头。 (__iendswith 不区分大小写)

books = BookInfo.objects.filter(bookname__isnull = False)
  # __isnull 是否为空。 True:表示为null。 False表示not null。

books = BookInfo.objects.filter(id__in = [1,3,5,7,9])
  # __in 范围查询。

books = BookInfo.objects.filter(id__gt = 1)
 # __gt 大于。 __lt 小于。 __gte 大于等于。 __lte 小于等于。

books = BookInfo.objects.filter(publictime__gt = date(2000,2,2)) 
 # 日期查询。日期大于条件中的日期

books = BookInfo.objects.filter(publictime__year = 1980)  
# 日期查询。(year、month、day、week_day、hour、minute、second)

注意点:
filter既可以查询一条语句,也可以查询多条语句 但是查询的结果放在一个列表里面
如果查询不到任何满足条件的数据,则返回的是一个空列表

1.5 exclude函数

#查询id不为1的所有图书,返回QuerySet查询集(可以遍历)
book = BookInfo.objects.exclude(id = 1) 

1.6 order_by函数

对查询结果进行排序。 返回QuerySet查询集(可以遍历)

book = BookInfo.objects.all().order_by('-id') 
#'id'表示升序; '-id'表示降序。
book = BookInfo.objects.order_by('-id')
#.all()可以省略。 默认查询所有。 可以结合filter等函数一起使用 。

1.7 关于外键的查询

add.userinfo_set.all()
#查询userinfo类生成的表的所有外键

1.8 create函数

Bookinfo.objects.create(填写字段值)

1.9 save函数


save是把创建的对象提交到数据库

1.10 update函数

一般是结合filter函数使用,通过filter函数筛选出需要改的数据然后在后面。update(改的字段 =值)

1.11 delete函数

与update函数的使用方法相似,一般也是结合filter函数使用,在使用filter函数查到需要删除的数据后,使用.delete()删除
##2. 导pymysql
导入pymysql文件,利用原生语句对数据库进行操作,性能更高

import pymysql
con = pymysql.connect(host='localhost', user='root', password='mysql', database='pai0805', port=3306,
                     charset='utf8')
cur = con.cursor()
cur.execute('select * from user_userinfo;')
ret = cur.fetchall()
print(ret)
str1 = ''
for i in ret:
   print(i)
   str1+='<ul><li>'+str(i[0])+'</li><li>'+i[1]+'</li><li>'+str(i[2])+'</li><li>'+i[3]+'</li></ul>'
print(str1)
return HttpResponse(str1)

附注:

在models.py文件中,添加在表类中,称为元类。但是修改之后需要迁移

class Meta:
        #用来设置数据库的表名
        db_table='bookinfo'
        verbose_name = '书籍'
        #修改后台管理站点中数据库表的名字
        verbose_name_plural=verbose_name

2.利用sqlalchemy

由于模型的增删改查相对来说性能差一点,pymysql的语句比较复杂,因此可以使用sqlalchemy来提高性能,且语句也不是特别复杂。
首先,准备步骤(导包,再连接数据库):

from sqlalchemy import create_engine
engine = create_engine('mysql://root:mysql@localhost/pai0805',encoding='latin1',echo = True)

然后就可以通过(对数据库CRUD):

cur = engine.execute(sql语句)

然后:

#关闭光标
cur.close

3.raw函数(原始sql查询)

#查询id等于1的用户
UserInfo.objects.get(id=1)#todo:查询不到会报错
UserInfo.objects.raw('select * from userInfo where id=1;')

raw函数是分装在django框架底层的函数,django框架的ORM模块的基础底层实现sql就是利用raw函数

回答: Django可以执行原生SQL语句,主要分为读和写两类操作。对于读操作,可以使用xxxModel.objects.raw()方法来执行原生SQL查询,并返回一个QuerySet集合对象。这个方法可以帮助我们在一些复杂的查询场景下使用原生SQL语句来获取数据。例如,可以使用raw()方法执行select语句,并通过遍历QuerySet对象来获取查询结果。\[1\]\[2\]\[3\]对于写操作,可以使用connection.cursor()方法来执行原生SQL语句,这个方法可以直接执行自定义的SQL语句,用于实现增删改等操作。\[1\]所以,通过Django的原生SQL执行方法,我们可以更灵活地处理一些复杂的查询和写操作需求。 #### 引用[.reference_title] - *1* *3* [django执行原生SQL语句](https://blog.csdn.net/Sunny_Future/article/details/124919058)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Django(22)Django执行SQL语句](https://blog.csdn.net/weixin_43880991/article/details/117102643)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值