前言:
虽然我们知道了用MySQL数据库 + pymysql可以进行数据库的连接,
但这样的方式太繁琐了。
本文介绍一下Django为我们提供的更简单便捷的数据库连接方式:ORM框架。
ORM为我们翻译代码,使得我们的代码更加简洁易懂。
1 连接SQL
pip install pymysql
#pip install mysqlclient
#二选一
2 创建数据库
ORM可以帮助我们做两件事情:
- 创建修改删除数据库中的表(不用写SQL语句);【无法创建数据库】
- 操作表中的数据;
step1:启动数据库
mysql -u root -p;
step2:使用自带工具创建数据库
show databases;
create database Django01 DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
这样就算创建成功了啦!
3 连接数据库配置
在settings.py文件中进行配置和修改。
把上面那个链接复制到浏览器打开可以寻找到配置文件,但是,太麻烦了
所以我选择直接百度:
文心一言YYDS。
原谅我废话有点多,我们现在可以把上面的database的文件换成百度给我们的内容吧。
啊,我真是太细致入微了。
把左边那个db.sqlite3删掉(删掉,删掉,通通删掉,再不删掉……)
再按照中文提示,对里面的内容进行注意修改:
4 使用类创建表
在model文件中,创建以下函数:
上面的语句经过ORM的转化,便转化为下面的SQL语句:
create table app01_UserInfo(
id bigint auto_increase primary key;
name varchar(32),
password varchar(64),
age int
)
先检查一下我们的数据库当中是否有其他表:
use django01;
show tables;
在命令行中进行以下命令:
python manage.py makemigrations
或者:
在pycharm的settings中找到:
看看左下方可可爱爱的小加号,
在搜索框中搜索pymysql,点击左下方的 Install Package就可以了
左下角出现这个小行,就算成功啦:
mysqlclient同理:
终于,回归主题:
接下来执行如下语句:
python manage.py migrate
于是乎,我们成功创建了这个数据表(庆祝,撒花)。
下面的一大堆是返回的结果图:
提示:完成这些的前提是要将app01注册到我们的settings.py文件当中哦
于是乎,我们的表中就可以看到这些东西啦:
至于,为什么会有这么多表呢?
因为Django提供了许多默认的函数,生成数据表的时候会连带生成这些功能函数的数据表。
5 创建和修改表结构
如果要删除表的列,只需要删除相应的python函数,再重新执行上面的两行命令就可以了。
如果要增加列,会出现以下提示:
因为我们的表中可能已经存有数据,所以增加列当中的数据就处于未定的状态。
若你选择1,则你将输入一个值,所有的行都赋这个值;
若你选择2,则不执行,需要你在函数体中添加一个默认值:
如:
score = models.IntegerField(default = 100)
不过我们作为程序员,有第三个选择:
score = models.IntegerField( null = ture , blank = true)
将函数的值改为允许为空值,则将所有的数据项的新属性均赋空值。
6 增删改查
6.1 增加数据
UserInfo.objects.create(name = "名字")
这句python语句,在sql语句当中相当于:
insert into app01_userinfo(name)values("名字")
6.2 删除数据
UserInfo.objects.filter(name = "名字").delete()
这句python语句,在sql语句当中相当于:
delete * from user_info where name = "名字";
当然,你也可以删库跑路(误) :
UserInfo.objects.all().delete()
6.3 获取数据
6.3.1 获取所有数据
UserInfo.objects.all()
得到的数据类型为数据表(list),QuerySet类型的数据;
6.3.2 逐一获取数据
data_list = UserInfo.objects.all()
for obj in data_list:
print(obj.id,objz.name,obj.password,obj.age)
同样,得到的数据类型为数据表(list),QuerySet类型的数据;
6.3.3 获取特定数据
data_list = UserInfo.objects.filiter("查找条件")
for obj in data_list:
print(obj.id,objz.name,obj.password,obj.age)
又同样,得到的数据类型为数据表(list),QuerySet类型的数据;
若你只想取到第一个数据,则:
data_list = UserInfo.objects.filiter("查找条件").first()
6.4 更新数据
更新所有数据:
UserInfo.objects.all().update(password=999)
更新某个特定数据:
UserInfo.objects.filter("查找条件").update(password=999)