原标题:Django——数据库的一系列操作
一:配置
在settings.py中保存了数据库的连接配置信息,Django默认初始配置使用sqlite数据库。
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': os.path. join(BASE_DIR, 'db.sqlite3'),}}
使用MySQL数据库首先需要安装驱动程序
pipinstall PyMySQL
在Django的工程同名子目录的**init.py**文件中添加如下语句
frompymysql importinstall_as_MySQLdbinstall_as_MySQLdb
作用是让Django的ORM能以mysqldb的方式来调用PyMySQL。
修改DATABASES配置信息
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','HOST': '127.0.0.1', # 数据库主机'PORT': 3306, # 数据库端口'USER': 'root', # 数据库用户名'PASSWORD': 'mysql', # 数据库用户密码'NAME': 'django_demo'# 数据库名字}}
在MySQL中创建数据库
createdatabasedjango_demo defaultcharset=utf8;
1)数据库表名
模型类如果未指明表名,Django默认以 小写app应用名_小写模型类名 为数据库表名。
可通过db_table 指明数据库表名。
2)关于主键
django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列。
默认创建的主键列属性为id,可以使用pk代替,pk全拼为primary key。
3)属性命名限制
不能是python的保留关键字。
不允许使用连续的下划线,这是由django的查询方式决定的。
定义属性时需要指定字段类型,通过字段类型的参数指定选项,语法如下:
属性=models.字段类型(选项)
2、迁移
将模型类同步到数据库中。
1)生成迁移文件
pythonmanage.pymakemigrations
2)同步到数据库中
pythonmanage.pymigrate
二 .演示工具使用
1、shell工具
pythonmanage.pyshel
2、查看MySQL数据库日志
tail -f /var/ log/mysql/mysql.log # 可以实时查看数据库的日志内容# 如提示需要sudo权限,执行# sudo tail -f /var/log/mysql/mysql.log
三.数据库操作—增、删、改、查
1、增加
增加数据有两种方法。
1)save
2)create
通过模型类.objects.create保存。
2、查询
2.1 基本查询
get 查询单一结果,如果不存在会抛出模型类.DoesNotExist异常。
all 查询多个结果。
count 查询结果数量。
2.2 过滤查询
实现SQL中的where功能,包括:
filter 过滤出多个结果
exclude 排除掉符合条件剩下的结果
get 过滤单一结果
对于过滤条件的使用,上述三个方法相同,故仅以filter进行讲解。
过滤条件的表达语法如下:属性名称__比较运算符=值
属性名称和比较运算符间使用两个下划线,所以属性名不能包括多个下划线。
1)相等
exact:表示判等。
2)模糊查询
contains:是否包含。
说明:如果要包含%无需转义,直接写即可。
3) 空查询
isnull:是否为null。
4) 范围查询
in:是否包含在范围内。
5)比较查询
gt 大于 (greater then)
gte 大于等于 (greater then equal)
lt 小于 (less then)
lte 小于等于 (less then equal)
**不等于的运算符,使用exclude过滤器。
6)日期查询
year、month、day、week_day、hour、minute、second:对日期时间类型的属性进行运算。
F对象
之前的查询都是对象的属性与常量值比较,两个属性怎么比较呢?答:使用F对象,被定义在django.db.models中。语法如下:F(属性名)
Q对象
多个过滤器逐个调用表示逻辑与关系,同sql语句中where部分的and关键字。
**如果需要实现逻辑或or的查询,需要使用Q对象结合|运算符,Q对象被义在django.db.models中。
聚合函数
使用aggregate过滤器调用聚合函数。聚合函数包括:Avg 平均,Count 数量,Max 最大,Min 最小,Sum 求和,被定义在django.db.models中。注意aggregate的返回值是一个字典类型,格式如下:
{‘属性名__聚合类小写’:值}如:{‘bread__sum’:3}
2.3 排序
使用order_by对结果进行排序
2.4 关联查询
由一到多的访问语法:关联过滤查询
由多模型类条件查询一模型类数据语法如下:
关联模型类名小写__属性名__条件运算符=值
注意:如果没有"__运算符"部分,表示等于。
由一模型类条件查询多模型类数据语法如下:
一模型类关联属性名__一模型类属性名__条件运算符=值
注意:如果没有"__运算符"部分,表示等于。
3、修改
修改更新有两种方法
1)save:修改模型类对象的属性,然后执行save方法
2)update:使用模型类.objects.filter.update,会返回受影响的行数
4、删除
删除有两种方法
1)模型类对象delete
2)模型类.objects.filter.delete返回搜狐,查看更多
责任编辑: