Django配置使用Mysql数据库
-
在命令行中,进入到MySQL数据库里创建按一个数据库。
sql语句:create database test1 charset=utf8;
注:一定要指定编码,否则默认为latin,拉丁文。
-
在创建的项目里的settings.py中配置数据库
注:django框架不会自动帮我们生成MySQL数据库,所以我们需要自己去创建。 -
切换mysql数据库不能启动服务器
需要在项目中安装python对应数据库的包
a. python2中需安装mysql-python
pip install mysql-python
b. python3中是pymysql
pip install pymysql
python3中安装好pymysql后,需要在test2/init.py中加入内容:
重定向
在当前也执行某项操作完成后,并应该跳转到另一个页面,但是直接让他跳转到执行操作的页面并刷新页面,这就叫做重定向。
在页面实现数据库数据增加、删除功能:
-
增加的视图函数
def add(request): """新增书籍""" b = BooksInfo() b.b_name = '天龙八部' b.b_date = '1963-9-1' b.b_read = 154 b.b_comment = 164 b.save() # return HttpResponse('OK') # 视图函数执行完成后前往的页面 # return HttpResponseRedirect('/books_index') # 重定向回到操作页面 # 重定向简写方式 return redirect('/books_index')
-
删除的视图函数
def delete(request, bid): """删除书籍""" b = BooksInfo.objects.get(id=bid) b.delete() return redirect('/books_index')
-
应用路由配置
url(r'^add', views.add), url(r'^delete/(\d+)', views.delete), # 绑定视图函数交互
-
效果演示
数据库对应的数据也会删除与增加
数据查询相关
查询函数
>通过模型类.objects属性可以调用如下函数,实现对模型类对应的数据表的查询。
- get : 返回表中满足条件的一条且只能有一条数据
1). - all:返回模型类对应表格中所有数据,返回的是一个QuerySet类型(查询集)。
- filter:返回满足条件的的数据。返回值是QuerySet,参数可以写查询条件。
- exclute:返回不满足条件的数据,返回值是QuerySet,参数可以写查询条件
- order_by:对查询结果进行排序,返回值是QuerySet,参数中写排序的字段。
通过from django.db.models import F,QSum,Count,Avg,Max,Min 可以调用以下函数
-
F对象:用于类属性之间的比较。
例:查询阅读量大于评论量的图书
例:阅读量大于评论量2 倍的图书
-
Q对象:用于条件之间的逻辑关系。
例:查询id大于3且阅读量大于200的图书
两种方式:
例:查询id大于3或阅读量大于200的图书
例:查询id不等于3的图书
-
aggregate:进行聚合操作,返回值是一个字典,进行聚合的时候需要先导入聚合类。
例:表中id数量
例:所有图书阅读量之和
例:所有图书阅读量平均值
例:所有图书阅读量中最大值
例:所有图书阅读量中最小值
-
count:返回结果集中数据的数目,返回值是一个数字。
例:查询数据库表中数据数量
例:查询id大于3 的数据数量
注:对一个QuerySet实例对象,可以继续调用上面的所有函数。
filter方法示例
条件格式:
模型类属性名__条件名=值
-
判等 条件名:exact
一般直接省略条件名直接写等号 -
模糊查询
1). contains:包含
例:查询书名中包含’传‘的图书2). endswith:以什么结尾的数据;startswith:以什么开头的数据。
例:查询以’西‘开头的图书和查找以’梦‘结尾的图书
-
空查询:isnull
例:查询图书名不为空
-
范围查询 in
例:查询id为1,3,5的图书
-
比较查询 gt:大于,lt:小于 ,gte:大于等于,lte:小于等于
例:查询id大于等于3的图书
-
日期查询
例:查询1993年发表的图书
例:查询1990年1月1日以后出版的图书
order_by方法示例
作用:进行查询结果排序
例:查询所有图书信息,按id从小到大排列
例:查询所有图书信息,按id从大到小排列
例:查询id大于3的图书信息按阅读量从大到小排序显示
查询集
all、filter、exclude、order_by调用这些函数会产生一个查询集,QuerySet类对象可以继续调用上面的所有函数。
-
查询集特性:
- 惰性查询:只有在实际使用查询集中的数据的时候才会发生对数据库的真正查询
- 缓存:当使用的是一个查询集时,第一次的时候会发生实际数据库的查询,然后把结果缓存起来,之后在使用这个查询集,使用的是缓存中的结果。
-
限制查询集
可以对一个查询集进行去下标或者切片操作来限制查询集的结果。
对一个查询集进行切片操作会产生一个新的查询集,下标不允许为负数。- 取出查询集第一条数据的俩种方式:
-
查询集对象[0] : 如果该数据不存在,会抛出IndexError异常
-
查询集对象[0:1].get():如果该数据不存在会抛出DoesNotExist异常。
-
exists:判断一个查询集中是否有数据,有是True,反之为False。
演示图:
-
- 取出查询集第一条数据的俩种方式:
字段属性和选项
模型类属性命名限制
- 不能是python的保留关键字。
- 不允许使用连续下划线,这是由django的查询方式决定的。
- 定义属性时需要指定字段类型,通过字段类型的参数指定选项,语法如下:
属性名=models.字段类型(选项)
字段类型
使用时需要先导入django.db.models包。
-
AutoField:自动增长的IntegerField,通常不用指定,不指定时django会自动创建属性名为id的自动增长属性。
-
BooleanField:布尔字段,值为True或False。
-
NullBooleanField:支持Null、True或False。
-
CharField:字符串,参数max_length表示最大字符个数,必须要指定这个参数。
-
TextField:大文本字段,一般超过4000个字符时使用。
-
IntegerField:整数。
-
DecialField(max_digits=None,decimal_places=None):十进制浮点数。参数max_digits表示总位,参数decimal_places表示小数位数。相比于FloatField更精准。
-
FloatField:浮点数,参数同上。
-
DateField:([auto_now=False,auto_now_add=False]):日期。
- 参数auto_now表示每次保存对象时,自动设置该字段为当前时间,用于最后一次修改的时间戳,它总是使用当前日期,默认为false。
- 参数auto_now_add表示当对象第一次被创建时自动设置当前时间,用于创建的时间戳,它总是使用当前日期,默认为false。
- 参数auto_now和参数auto_now_add不能组合使用,否则会发生错误。
- TimeField:时间,参数如同DateField
- DateTimeField:日期时间,参数同DateField
- FileField:上传文件字段
- ImageField:继承于FileField,对上传的内容进行校验,确保是有效图片。
选项(对字段的约束)
-
default:设置默认值
-
primary_key:若为True,则该字段会成为模型的主键字段,默认值为False,一般作为AutoField的选项使用。
-
unique:若为True,这个字段在表中必须有唯一值,默认值是False。
-
db_idnex:若为True,则在表中会为此字段创建索引,默认值为False。
-
db_column:字段的名称,如果未指定,则使用属性的名称。
-
null:如果为True,表示允许为空,默认值为False。
-
blank:如果为True,则该字段允许为空白。
对比:null是数据库范畴的概念,blank是后台管理页面表单验证范畴的。
经验:当修改模型类之后,如果添加的选项不影响表的结构,则不需要重新做迁移,商品的选项中default和blank不影响表结构。