Django框架学习日寄(三)——ORM框架

Django框架学习日寄(三)——ORM框架

可以通过pymysql模块实现,但是Django有ORM框架, 能更方便地操作数据库.

image-20230405211408938

ORM框架是一种数据库语言解释器, 能兼容不同的数据库, 遍历开发者进行数据库迁移.

MySQL数据库操作(ORM)

前置准备

安装mysqlclient模块.

pip install mysqlclient

MySQL操作

  • 登录MySQL

    musql -u root -p
    
  • 查看已有的数据库(文件夹)

    show databases;
    
  • 创建数据库(文件夹)

    create database <数据库名称> DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
    
  • 删除数据库(文件夹)

    drop database <数据库名称>;
    
  • 进入数据库(进入文件夹)

    use database <数据库名称>;
    
  • 查看文件夹下所有的数据(文件)

    show tables;
    

ORM

ORM做两件事(无需写数据库语句):

  • 创建/修改/删除数据库中的表,但是无法创建数据库.
  • 操作表中的数据(CRDU).

创建数据库

  1. 启动MySQL服务

  2. 利用MySQL自带工具创建数据库

    create database <数据库名称> DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
    

连接数据库

settings.py中配置和修改.

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.mysql",
        "NAME": "xxx",  # 数据库名称
        "USER": "root",
        "PASSWORD": "xxxx",
        "HOST": "xxxx",
        "PORT": xxxx,
    }
}

操作数据表

models.py文件中编写, 通过编写类进行数据表的操作.

数据库创建命令

python manage.py makemigrations
python manage.py migrate

每次数据库表表操作完成之后,需要运行命令来更新数据库.

app需要已注册.

  • 创建表

    class UserInfo(models.Model):
    	name = models.CharField(max_length=32)
    	password = models.CharField(max_length=64)
    	age = models.IntegerField(default=0)
    
  • 删除表

删除表对应的类即可.

  • 修改表

若表中已有数据,Django提供两种修改表(设置新字段的默认值)的方式:

  1. default, 终端内设置.
  2. quit, models.py内设置.
  • 设置默认值

    age = models.IntegerField(default=0)
    
  • 允许为空

    age = models.IntegerField(null=True, blank=True)
    

增删改查(CRDU)

数据表(table), 对应类(tableClass).

  • 添加数据

    tableClass.objects.create(<key>=<value>)
    
  • 删除数据

    # 全部删除
    tableClass.objects.all().delete()
    # 过滤,条件删除
    tableClass.objects.filter(id=1).delete()
    
  • 修改数据

    # 全部修改
    tableClass.objects.all().update(<key>=<value>)
    # 筛选修改
    tableClass.objects.filter(<条件>).update(<key>=<value>)
    
  • 查找数据

    # 返回queryset类型的数据[行,...行]
    # 类似列表,每一行都为对象,内部封装了字段, 可用索引获取
    # 获取全部数据
    data_list = tableClass.objects.all()
    # 条件查找数据
    data_list = tableClass.objects.filter(<条件>)
    ## 获取第一个匹配的对象
    data_list = tableClass.objects.filter(<条件>).first()
    for obj in data_list:
        print(obj.id, obj.name, obj.password, obj.age)
    
posted @ 2023-04-05 22:30  络辰  阅读(17)  评论(0编辑  收藏  举报