Django---数据库一系列操作

一:配置

settings.py中保存了数据库的连接配置信息,Django默认初始配置使用sqlite数据库。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

使用MySQL数据库首先需要安装驱动程序
pip install PyMySQL

在Django的工程同名子目录的**init.py**文件中添加如下语句

from pymysql import install_as_MySQLdb

install_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中创建数据库

create database django_demo default charset=utf8;

1) 数据库表名

模型类如果未指明表名,Django默认以 小写app应用名_小写模型类名 为数据库表名。

可通过db_table 指明数据库表名。

2) 关于主键

django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列。

默认创建的主键列属性为id,可以使用pk代替,pk全拼为primary key。

3) 属性命名限制

不能是python的保留关键字。
不允许使用连续的下划线,这是由django的查询方式决定的。
定义属性时需要指定字段类型,通过字段类型的参数指定选项,语法如下:

属性=models.字段类型(选项)

2 迁移

将模型类同步到数据库中。

1)生成迁移文件

python manage.py makemigrations

2)同步到数据库中

python manage.py migrate

二 .演示工具使用

1 shell工具

python manage.py shel

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()

猜你喜欢

转载自blog.csdn.net/qq_43475097/article/details/83786823
今日推荐