【Python + Django】ORM 数据库操作

前言:

虽然我们知道了用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。

# settings.py
 
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # 指定数据库引擎
        'NAME': 'mydatabase',                  # 你的数据库名称
        'USER': 'mydatabaseuser',              # 你的数据库用户名
        'PASSWORD': 'mydatabasepassword',      # 你的数据库密码
        'HOST': 'localhost',                   # 数据库主机
        'PORT': '3306',                        # 数据库端口
        'OPTIONS': {
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
        },
    }
}

原谅我废话有点多,我们现在可以把上面的database的文件换成百度给我们的内容吧。

啊,我真是太细致入微了。

把左边那个db.sqlite3删掉(删掉,删掉,通通删掉,再不删掉……)

再按照中文提示,对里面的内容进行注意修改:

4 使用类创建表

在model文件中,创建以下函数:

 代码贴下来:

class UserInfo(models.Model):
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=32)
    age = models.IntegerField()

上面的语句经过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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谷雨__

愿你有所得,有所成。谢谢打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值