Django ORM 基础字段&选项&增删改查

前置条件

  1. MySQL已安装
  2. 安装pip3 install mysqlclient. #是对C语言操作MySQL数据库的一个简单封装支持Python3
  3. 安装不上mysqlclient的话,pip3 install pymysql #纯Python实现的一个驱动. 用pymysql的话需要伪装成mysqlclient(因为Django源代码要求mysqlclient),伪装方法:在项目的__init__.py文件里添加如下配置
    import pymysql
    pymysql.version_info = (1, 4, 13, "final", 0)
    pymysql.install_as_MySQLdb()

创建数据库

  • create database 数据库名 default charset utf8
  •  通常数据库名称跟项目名称一致

Django配置数据库

  • setttings.py里数据库具体配置如下
    # Database
    # https://docs.djangoproject.com/en/4.2/ref/settings/#databases
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'pmms',  # 数据库名称
            'HOST': '127.0.0.1',  # 数据库地址,本机 ip 地址 127.0.0.1
            'PORT': 3306,  # 端口
            'USER': 'root',  # 数据库用户名
            'PASSWORD': 'BuNengGaoSuNi',  # 数据库密码
        }
    }

模型介绍

  • 模型是一个Python类,它是由django.db.models.Model派生出来的子类。
  • 一个模型类代表数据库中的一张数据表。
  • 模型类的一个对象代表数据表的一行数据。
  • 模型类中的每一个类属性都代表数据库中的一个字段。
  • 模型是数据交互的接口,是表示和操作数据库的方法。

ORM介绍

ORM(Object Relational Mapping)即对象关系映射,它是一种程序技术,允许你使用类和对象对数据库进行操作,从而避免通过SQL语句操作数据库。

模型类代码示例

class AbilityScore(models.Model):
    index = models.AutoField("Index", auto_created=True, primary_key=True)
    employee_id = models.CharField("EmployeeID", max_length=10)
    ability_id = models.IntegerField("AbilityID")
    approved_value = models.CharField("ApprovedValue", max_length=2)
    upcoming_value = models.CharField("UpcomingValue", max_length=2)
    create_time = models.DateTimeField("CreateTime", auto_now_add=True)
    update_time = models.DateTimeField("UpdateTime", auto_now=True)

    class Meta:
        db_table = 'ability_score'

模型类之字段选项

  • 字段选项,指定创建的列的额外信息(如列不只有数据类型还有长度、自增等)
  • 多个选项之间使用逗号,隔开
  1. primary_key 设置为True则数据表不会自动创建id字段,默认False
  2. blank 设置为True时,Django admin管理后台填写数据表时该项值可以不填,不是数据库里的是否可为空。
  3. null  该列值是否允许为空,默认False。建议null=False和default来配合使用,而不是null=True
  4. default 所在列默认值。
  5. db_index 普通索引,声明当前字段要不要添加索引,True/False
  6. unique 唯一索引,设置为True,表示该字段的值不能重复。
  7. db_column 指定列的名称,如果不指定的话则采用属性名作为列名
  8. verbose_name 设置此字段在admin界面上的显示名称(如在后台设置中文名啦对维护更友好。)
  • 好习惯:修改了字段选项【添加或更改】均要makemigrations migrate

 模型类-Meta类(内部类)

使用内部Meta类来给模型赋予属性,Meta类下有很多内建的类属性,可对模型来做一些控制。

用于控制表的属性,如表名。改了Meta类也要makemigrations migrate

但凡模型类发生变化都要makemigrations migrate

class Meta:
        db_table = 'ability_score'

migration 文件不要在代码里追踪。

ORM-管理器对象

ORM CRUD核心->模型类自带的管理器对象

管理器对象:每个继承自Models.Model的模型类,都会有一个objects对象同样被继承下来,即管理器对象。

数据库的增删改查可以通过模型的管理器实现

class MyModel(models.Model):
    ...
MyModel.objects.create(...) # objects 即管理器对象

Django Shell

在Django提供了一个交互式的操作项目叫Django Shell它能够在交互模式用项目工程的代码(如数据的连接配置和已有的model类),加载当前的项目环境,执行相应的操作。

利用Django Shell可以代替编写view的代码来进行直接操作

注意:项目代码发生变化时,重新进入Django Shell

启动方式:python3 manage.py shell

python.exe .\manage.py shell
Python 3.9.0 (tags/v3.9.0:9cf6752, Oct  5 2020, 15:23:07) [MSC v.1927 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> 

ORM-插入操作

Django ORM使用一种直观的方式把数据库表中的数据表示成Python对象。

创建数据中每一条记录就是创建一个数据对象

  • 方案一(Prefered):

直接使用管理器对象objects 进行create

MyModel.objects.create(属性1=值1, 属性2=值2, ...)
models.AbilityScore.objects.create(employee_id=employee_id, ability_id=ability_id,
                                   upcoming_value=upcoming_value)

        成功:返回创建好的实体对象

        失败:抛出异常

  • 方案二:

创建MyModel实例对象,并调用save()进行保存。

obj = MyModel(属性1=值1,属性2=值2)
obj.属性=值
obj.save()

ORM-查询操作

你可能感兴趣的:(Python,#,Django,django,python,后端)