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函数