阅读目录(Content)

对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。

简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。

ORM在业务逻辑层和数据库层之间充当了桥梁的作用

二 Django连接MySQL

1.创建数据库(注意设置 数据库的字符编码

create database student default character set utf8 collate utf8_general_ci;

2.修改project中的settings.py文件中的设置 连接MySQL数据库(Django默认使用的是sqllite数据库)

DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME':'student',
    'USER': 'root',
    'PASSWORD': '123123',
    'HOST': '127.0.0.1',
    'PORT': '3306',
    }
}

扩展:查看ORM操作执行原生的SQL语句

在project中的settings.py文件增加

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console':{
            'level':'DEBUG',
            'class':'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'propagate': True,
            'level':'DEBUG',
        },
    }
}

3、修改project 中的__init__py 文件设置 Django默认连接MySQL的方式

import pymysql
pymysql.install_as_MySQLdb()

4、setings文件注册APP

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01.apps.App01Config',
   
]

 5、models.py创建表

class Publisher(models.Model):
    id = models.AutoField(primary_key=True)
    publishName = models.CharField(max_length=32)
    address = models.CharField(max_length=32)

6、进行数据迁移

  6.1、在 winds cmd 或者 PyCharm Terminal 的项目的manage.py目录下执行 

python manage.py makemigrations

python manage.py migrate

扩展:修改表之后常见‘ 报错 ’ 

You are trying to add a non-nullable field 'tele' to publisher without a default; we can't do that (the database needs something
 to populate existing rows).
Please select a fix:
 1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
 2) Quit, and let me add a default in models.py
Select an option:

这个报错:因为表创建好之后,新增字段没有设置默认值,或者原来表中字段设置了不能为空参数,修改后的表结构和目前的数据冲突导致;  

三、modles.py创建表

ORM字段介绍

Django提供了很多字段类型,比如URL/Email/IP/ 但是mysql数据没有这些类型,这类型存储到数据库上本质是字符串数据类型,其主要目的是为了封装底层SQL语句;  

常用字段

1 AutoField

int自增列,必须填入参数 primary_key=True。当model中如果没有自增列,则自动会创建一个列名为id的列。

2 IntegerField

 

一个整数类型,范围在 -2147483648 to 2147483647

3 CharField

字符类型,必须提供max_length参数, max_length表示字符长度。

4 DateField

日期字段,日期格式  YYYY-MM-DD,相当于Python中的datetime.date()实例。

5 DateTimeField

日期时间字段,格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],相当于Python中的datetime.datetime()实例

细分 

1.字符串类(以下都是在数据库中本质都是字符串数据类型,此类字段只是在Django自带的admin中生效)

class Publisher(models.Model):
    id = models.AutoField(primary_key=True)
    publishName = models.CharField(max_length=32)
    address = models.CharField(max_length=32)
    tele = models.CharField(max_length=32)
models.py

相关文章:

  • 2022-02-15
  • 2021-07-05
  • 2021-11-09
  • 2021-11-03
  • 2022-12-23
猜你喜欢
  • 2022-02-24
  • 2021-06-30
  • 2021-12-10
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-13
相关资源
相似解决方案