Django数据库ORM模型使用(介绍、配置、创建表)!Django的ORM模型如何连接MySQL并创建表? ✧*。٩(ˊᗜˋ*)و✧*。 Django初体验

介绍ORM

对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。
Django中的ORM简单说就是你调用相应的方法,Django框架会自动帮你转换成原生SQL进行执行。
经过ORM转换的SQL语句虽然有一定的性能损坏,不过Django将方法转换成SQL语句时也会尽力去优化语句,另一方面当今计算机的性能越来越强大的今天,转换的性能损坏对于大多数服务器来说已经可以忽略不计了。
但ORM模型所带来的的优势却日益突出,特别是代码的可读性和代码维护上。项目越大越能体现出ORM的优越性。

连接MySQL数据库

使用djangoORM连接MySQL数据库我们需要安装mysqlclient这个模块,如果你在安装的时候报错,提示c++库未安装可以尝试从浏览器中下载mysqlclient库并离线安装。下载地址
如果安装失败,就先升级一下pip(一定要保证pip在最新状态)可以使用清华源升级pippip install --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple pip

配置文件

下载完mysqlclient我们需要在配置文件(settings.py)中进行配置
在DATABASES中添加信息(这里大小写敏感,配置名必须大写)

DATABASES = {
    'default': {
        # 注明使用的数据库为MySQL
        'ENGINE': 'django.db.backends.mysql',
        # 使用的数据库表名
        'NAME': 'django的ORM',
        # 数据库登陆用户名
        'USER': 'root',
        # 数据库登陆密码
        'PASSWORD': 'root',
        # 数据库登陆ip
        'HOST': 'localhost',
        # 数据库端口
        'POST': '3306'
    }
}

创建表

每个APP都会自带一个models. py文件,这个文件就是APP给你预留用于创建表的文件。下列大致的创建流程。

  1. 在settings.py中,配置好DATABASES,做好数据库相关的配置。
  2. 以类的形式创建一个表,默认表名为APP名_类名,此类需要继承(models.Model)。其中进行Field属性创建不同属性的表头,或者创建外键等操作
  3. 生成迁移脚本文件(python manage.py makemigrations),迁移脚本文件会将每次数据库的变化记录在migrations文件夹中
  4. 最后将migrations变化的APP的模型映射进入数据库(python manage.py migrate)
    可以在命令行启动映射命令,如果你是用pycharm,这可以使用下列方法
    在这里插入图片描述

Field属性介绍

选择field类型的时候相当于我们在选择数据的存储类似
在这里插入图片描述
field类型众多,这么我们暂时先介绍一些比较常用的类型

field类型 作用
AutoField() 在数据库中为int类型,映射到数据库中是int类型的主键,默认长度为11,有自增特性(Django的ORM创建表时如果没有主键会自动生成表头为此类型名称为id的主键)使用此字段必须传入primary_key=True
BigAutoField() 在数据库中为bigint类型,用于长整数类型的主键,长度为20,有自增特性与AutoField不能共存。使用此字段必须传入primary_key=True,用作为主键的还有个SmallAutoField()和此方法类似
BooleanField() 在数据库中为tinyint类型,长度为1,在模型层面,此类型接收的是True或Flast,当没有指定默认值时默认为None
CharField() 在数据库中为varchar类型,在模型中为字符串类型,此类型必须指定长度(max_length)
DateTimeField() 在数据库中为datatime类型,用于存储日期时间,因为Django中有时区概念,下方会详解此类型。
EmailField() 在数据库中为varchar类型,用于存储邮箱,默认长度为254,且不能为空(配合表单会检测邮箱合法性)
FileField() 在数据库中为varchar类型,用于存储文件(存储的文件路径)
ImageField() 在数据库中为varchar类型,用于存储图片(存储图标需要安装pip install Pillow)
FloatField() 在数据库中为double类型,浮点类型,用于存储浮点数
SmallIntegerField() 在数据库中为smallint类型,默认长度为6的短整数类型,值的区间在-32768, 32767
IntegetField() 在数据库中为int类型,默认长度为11的整数类型,值的区间在-2147483648, 2147483647
BigIntegerField() 在数据库中为bigint类型,默认长度为20的长整数类型,值的区间在-9223372036854775808, 9223372036854775807
PositiveSmallIntegerField() 在数据库中为smallint类型,默认长度为5的非负小整数,值的区间在0, 32767
PositiveIntegerField() 在数据库中为int类型,默认长度为10的非负整数,值的区间在0, 2147483647
TextField() 在数据库中为longtext类型,长整数类型,通常使用大量文本时才会使用此类型
UUIDField() 在数据库中为char类型,只能存储UUID格式字符串,(UUID为一个32位的全球唯一的字符串,一般用来作为主键)
URLField() 在数据库中为varchar类型,用于存储URL格式字符串,默认长度为200。

Django日期类型详解

Django中日期为分时区日期,其中在setting.py中可以设置当前时区,默认为协调世界时(UTC),在中国我们大多使用TIME_ZONE = Asia/Shanghai这个时区。
如果不想引入时区的概念可以将USE_TZ = True设为Flast,即可关闭时区
在这里插入图片描述
Django建议大家使用from django.utils.timezone import now保存当前时间
存储日期除了我上述介绍的方式外,还有DateFieldTimeField,他们分别只能存储日期与时间,使用较少。
日期的field有两个特殊的属性,分别是

  • auto_now=True 自动创建—无论添加或修改,都是当前操作的时间
  • auto_now_add=True 自动创建—永远是创建时的时间

Field属性中常用参数

常用参数 作用
null 是否允许为空(默认为False)
db_column 此字段在数据库中的名称(如果不设置此参数,默认名称为属性名)
default 默认值,可以是一个值,也可是一个函数
primary_key 是否为主键,默认为Falst
unique 在表中此字段值是否唯一(手机号邮箱号等常用)
max_length 指定字段长度

模型中Meta配置

对于一些模型级别的配置。我们可以在模型中定义一个类,叫做Meta(此类必须放置在数据库模型中,也就是集成了models.Model的类中)。然后在这个类中添加一些类属性来控制模型的作用。

db_table

我们使用ORM创建的表名默认为APP名_类名,如果我们不想使用此名称,可以在Meta类(class Meta)写入db_table指定名称

ordering

ordering用于指定读取数据时,数据的排序方式,比如ordering = ['id']为id的升序,ordering = ['-id']为id的降序

class People(models.Model):
    id = models.AutoField(primary_key=True)
    角色 = models.CharField(max_length=20)
    介绍 = models.TextField()
    当前时间 = models.DateTimeField()

    class Meta:
        db_table = '模型创建测试表'
        ordering = ['id']
发布了78 篇原创文章 · 获赞 45 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_39611230/article/details/104975310
今日推荐