Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

这部分主要是关于Django中ORM是如何操作数据库中的表。

1、ORM链接数据库

我们在python中可以使用很多方法来操作我们的数据库,比如可以使用pymysql;但是我们正在使用Django来完成我们的任务,而这里面准备了一个ORM框架(可以理解为解释器,可以将我们的python代码转换为mysql代码,这样就不需要我们在写一大堆mysql语句了)

  • 首先,我们先下载 mysqlclient库,因为对于新版的Django框架而言,这个库会比 pymysql更加适用。

我们需要注意,虽然ORM可以操作数据库中的表,但是其不能对数据库进行操作

  • 所以,我们需要先在本地创建一个库,然后在 settings.py文件中进行配置
1
2
3
4
5
6
7
8
9
10
DATABASES = {
'default':{
'ENGINE': 'django.db.backends.mysql', #默认链接mysql数据库
'NAME': 'xxx', #数据库名
'USER': 'root', #用户名
'PASSWORD': "xxx", #自己设置的密码
'HOST': 'localhost', # 一般数据库位于本地
'PORT': '3306', # 数据库使用端口
}
}

通过以上的步骤,我们就成功连接数据库了。

2、ORM创建表操作
  • 为了创建我们的表格,我们需要到 models.py中写对应的python代码
1
2
3
4
5
# Create your models here.
class UserInfo(models.Model): # 类继承,必须要写
name = models.CharField(max_length=32)
password = models.CharField(max_length=64)
age = models.IntegerField()

以上的python语句会被ORM翻译成如下的mysql语句:

1
2
3
4
5
6
create table app01_userinfo(
id bigint auto_increment primary key, # 系统自动添加上
name varchar(32),
password varchar(64),
age int
)

需要注意的是:建表行为必须要此app之前在 settings.py中注册过才能生效

  • 完成了以上步骤之后,我们还需要执行以下两条指令才可以将此处的表格添加到数据库中
1
2
python manage.py makemigrations
python manage.py migrate

还需注意的是,在执行这两条命令时,需要位于项目的根目录下,不然是找不到 manage.py文件的。

这样一切就大功告成了,我们便可以在本地数据库软件中查看到对应添加的表。

3、ORM修改表结构

在上文我们已经介绍了如何创建表格,那么如果当你想新添加表时,就同样执行那两条python命令就可以了,而如果想要删除掉某个表或者某个元素,只需要注释掉再执行python命令即可。但是当你想要新增加表中的元素时,考虑到原来表中其他元素存在对应值,所以新增加的元素这列的值需要你来决定,以下是几种决定方式:

  1. 手动输入特定值
  2. 添加默认值:
1
2
3
age = models.IntegerField(default=2)
# 或者允许该值为空值
age = models.IntegerField(blank = True,null = True)

接下来,我们将要学习如何使用对应的语句来对表中数据进行修改:

  • 添加操作
    为了在表中添加一条记录,我们可以使用以下语句:
1
2
3
表名.objects.create(填入表结构对应的属性值)
# example
UserInfo.objects.create(name = 'Jerry',password = '123456',age = 18)
  • 删除操作
    为了在表中删除对应的记录,回想我们在数据库中学到的知识,我们要删除记录就必须要筛选到那一条记录,所以使用以下的语句:
1
2
3
4
表名.objects.filter(筛选条件).delete()
# example
UserInfo.objects.filter(id=1).delete()
UserInfo.objects.all().delete() #删除掉所有元组
  • 获取数据
    我们在使用Django时免不了要查看数据库中的数据,那么就可以使用以下的语句:
1
2
3
变量名 = 表名.objects.all()/filter()
# example
data_list = UserInfo.objects.all()

note warning 注意:当我们执行查询时返回的数据类型为queryset类型,而每个表中元组作为对象在返回的数据类型中,可以理解为返回数据为list,而表中每行都是其中的一个元素

为此,我们可以这样访问:

1
2
3
# example
for obj in data_list:
print(obj.id, obj.name, obj.password, obj.age)

我们还需要注意即使是添加了筛选条件返回的数据类型也是queryset类型,所以还是要用列表的形式来访问:

1
2
# example
data_list = UserInfo.objects.filter(name='Jerry')

但是,当我们添加更多的条件时,就会直接筛选出对应的对象。此时,我们可以看到添加了.first()的条件后,就是默认取出列表中的第一个对象,这样便可以直接访问,而不需要使用列表的形式访问。

1
2
3
# example
row_object = UserInfo.objects.filter(name='Jerry').first()
print(row_object.id, row_object.name, row_object.password, row_object.age)
  • 更新数据
    到目前为止,表操作只剩下了更新数据,而该语法也与上面的的大同小异:
1
2
3
表名.objects.筛选条件.update(更新项目)
# example
UserInfo.objects.all().update(age=18)

评论