0
点赞
收藏
分享

微信扫一扫

基于Pycharm的Django学习3 —— ORM

J简文 2022-02-13 阅读 62

基于Pycharm的Django学习

ORM是个啥?

ORM,对象关系映射(Object Relational Mapping,简称ORM)模式,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。
在这里插入图片描述
也就是说,ORM充当一个翻译的功能。

安装第三方库

pip install mysqlclient

在这里插入图片描述

创建数据库

ORM到底能够帮助我们做什么呢?

  • 创建、删除、修改数据库中的表(不用你写SQL语句),但是无法帮助你创建数据库。
  • 操纵表中的数据(不用你写SQL语句)。

所以你自己得先创建数据库

启动MySQL服务,大家可以看我之前的博客奥。

戳链接:启动MySQL服务

在这里插入图片描述
我的数据库django创建好了!

Django连接数据库

在Django项目中,我们可以看到,其settings.py配置文件中,有默认的数据库设置,但是其为sqlite3,一个轻量级的数据库,但是我们不想要这个数据库,我们想使用Mysql数据库。

在这里插入图片描述
将上述的注释掉,换成如下:

DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    # 数据库名字
    'NAME':'写自己的名字',
    # 用户名
    'USER': 'root',
    # 密码
    'PASSWORD': '写自己的密码',
    # 主机
    'HOST': 'localhost',
    # 端口
    'PORT': '3306',
    }
}

操作表

然后我们就需要创建表、删除表、修改表了。

在models.py中:

# 定义的类必须继承models.Model这个类


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


"""
这样orm就会帮助我们创建表:
表名 app_userinfo APP名字_类名
字段 name varchar(32) password varchar(64) age int
"""

在这里插入图片描述
但是现在,我们数据库中仍然什么都没有,我们需要去执行命令!

python manage.py makemigrations
python manage.py migrate

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果我想增加、或者删除表或者字段,就只需要在models.py中操作,然后再执行上述两个命令就好啦。一定要及时执行上述两个命令!

操作表数据

为了操作表数据,我专门写了一个测试函数。

在这里插入图片描述
在这里插入图片描述
注意在引入models.py的时候注意写法!

错误示范:

在这里插入图片描述
正确示范:

在这里插入图片描述

增加表数据:

# 增加表数据
   	models.UserInfo.objects.create(name="王晓曼", password="666", age=20)
    models.UserInfo.objects.create(name="冷亦兮", password="123", age=19)
    models.UserInfo.objects.create(name="谷爱凌", password="111", age=18)

在这里插入图片描述
一不小心增加了两次:注意运行后,这个地方需要点击空白处,右键进行刷新奥。
可是为什么表中没有数据呢?age类型不对!注意细节!!

删除表数据:

删除表数据有两种,一种是筛选后再删除,一种是删除所有,由于删除所有太可怕,所以我这里没有演示!

 # 删除表数据
    models.UserInfo.objects.filter(id=6).delete()  # 筛选条件后删除
    models.UserInfo.objects.all().delete()  # 删除所有

在这里插入图片描述
在这里插入图片描述

查找表数据:

删除数据有两种方法,其实那两种方法也是对应的查找的两种方法,因为是要先查找再删除的。很多注意事项,都在注释里面写了。

# 查看表数据
    # data_list是一个queryset类型 类似于一个列表 [行对象,行对象,……]
    data_list = models.UserInfo.objects.all()
    print(type(data_list))

    # 对于queryset类型的data_list 也可以使用for循环取出数据
    for obj in data_list:
        print(obj.id, obj.name, obj.password, obj.age)

    # 尽管只有一条数据 data_id_1是一个queryset类型
    data_id_1 = models.UserInfo.objects.filter(id=1)
    print(type(data_id_1))

    # 如果想直接取出其中的那一条数据 需要加上first()
    data_id_2 = models.UserInfo.objects.filter(id=2).first()
    print(type(data_id_2))

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

修改表数据:

查找数据有两种方法,其实那两种方法也是对应的修改的两种方法,因为是要先查找再修改的。

# 修改表数据
    models.UserInfo.objects.all().update(age=20)
    models.UserInfo.objects.filter(id=5).update(age=30)

在这里插入图片描述
是不是学完后感觉很简单呢?!

请问您实现了SQL自由吗~

举报

相关推荐

0 条评论