数据库PyMySQL和ORM

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/geek64581/article/details/102647766

数据库和ORM

前言

ORM框架

O是object,也就类对象的意思,R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思,M是mapping,是映射的意思。在ORM框架中,它帮我们把类和数据表进行了一个映射,可以让我们通过类和类对象就能操作它所对应的表格中的数据。ORM框架还有一个功能,它可以根据我们设计的类自动帮我们生成数据库中的表格,省去了我们自己建表的过程。

  • 类(class) -> 数据库的表(table)
  • 对象(object)–> 记录(record,行数据)
  • 对象的属性(attribute)–> 字段(field)

ORM作用
在这里插入图片描述

第一章 配置数据库PyMySQL

在settings.py中保存了数据库的连接配置信息,Django默认初始配置使用sqlite数据库。

1.1 安装PyMySQL

pip install PyMySQL

1.2 在Django的工程同名子目录的__init__.py文件中添加如下语句(demo/demo/init.py)

from pymysql import install_as_MySQLdb
install_as_MySQLdb()

作用是让Django的ORM能以mysqldb的方式来调用PyMySQL

1.3 修改settings.py中DATABASES配置信息

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

1.4 在MySQL中创建数据库

create database django_demo default charset=utf8;

第二章 定义模型类

  • 模型类被定义在"应用/models.py"文件中。
  • 模型类必须继承自Model类,位于包django.db.models中。

接下来首先以"图书"管理为例进行演示。

2.1 定义

创建应用booktest,在models.py 文件中定义模型类。

from django.db import models

#定义图书模型类BookInfo
class BookInfo(models.Model):
    btitle = models.CharField(max_length=128, verbose_name='名称')
    author = models.CharField(max_length=64,verbose_name='作者')
    bread = models.IntegerField(default=0, verbose_name='阅读量')

    class Meta:
        db_table = 'tb_books'  # 指明数据库表名

    def __str__(self):
        """定义每个数据对象的显示信息"""
        return self.btitle

 2.1.1 数据库表名

  • 模型类如果未指明表名,Django默认以 小写app应用名_小写模型类名 为数据库表名。
  • 可通过db_table 指明数据库表名。

 2.1.2 关于主键

  • django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列。
  • 默认创建的主键列属性为id,可以使用pk代替,pk全拼为primary key。

 2.1.3 属性命名限制

  • 不能是python的保留关键字。
  • 不允许使用连续的下划线,这是由django的查询方式决定的。
  • 定义属性时需要指定字段类型,通过字段类型的参数指定选项,语法如下:

属性=models.字段类型(选项)

 2.1.4 字段

字段类型 说明
AutoField 自动增长的IntegerField,通常不用指定,不指定时Django会自动创建属性名为id的自动增长属性
BooleanField 布尔字段,值为True或False
CharField 字符串,参数max_length表示最大字符个数
TextField 大文本字段,一般超过4000个字符时使用
IntegerField 整数
DecimalField 十进制浮点数, 参数max_digits表示总位数, 参数decimal_places表示小数位数
FloatField 浮点数
DateTimeField 日期时间

2.2 迁移

将模型类同步到数据库中。

 2.2.1 生成迁移文件

python manage.py makemigrations

 2.2.2 同步到数据库中

python manage.py migrate

猜你喜欢

转载自blog.csdn.net/geek64581/article/details/102647766
今日推荐