Django中ORM对象关系的映射

 

ORM

面向对象的的方式去操作数据库的创建表以及增删改查等操作

优点:ORM使得通用的数据库变得更加的简单,不用去考虑所谓的SQL语句。

通过在Django中创建表来进一步解释(这里用到的数据库是MySQL)

因为我们用到的是MySQL所以必须连接的是MySQL的数据库进行同步,在项目的__init__py文件设置Django连接数据库

import pymysql
pymysql.install_as_MySQLdb()

在settings中对DATABASES进行修改

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME':"mysite",
        'USER':"root",
        'PASSWORD':"password",
        'HOST':'192.168.182.182',
        'PORT':'3306',
    }
}

在连接数据库之前需要做的是在settings里的INSTALLED_APPS中加入“app名”,然后同步数据库

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

在models.py中进行建表:

from django.db import models
class Publisher(models.Model): name = models.CharField(max_length=30, verbose_name="名称") address = models.CharField("地址", max_length=50) city = models.CharField('城市',max_length=60) state_province = models.CharField(max_length=30) country = models.CharField(max_length=50) website = models.URLField() class Meta: verbose_name = '出版商' verbose_name_plural = verbose_name def __str__(self): return self.name class Author(models.Model): name = models.CharField(max_length=30) def __str__(self): return self.name class AuthorDetail(models.Model): sex = models.BooleanField(max_length=1, choices=((0, '男'),(1, '女'),)) email = models.EmailField() address = models.CharField(max_length=50) birthday = models.DateField() author = models.OneToOneField(Author) class Book(models.Model): title = models.CharField(max_length=100) authors = models.ManyToManyField(Author) publisher = models.ForeignKey(Publisher) publication_date = models.DateField() price=models.DecimalField(max_digits=5,decimal_places=2,default=10) def __str__(self): return self.title

最后进行数据的迁移需要在终端输入以下两行代码:

1.通过app文件下的migrations目录记录,检测models.py中的di代码是否发生变化。

>>>pyhton manage.py makemigrations

2.把ORM代码转化成SQL语句去操作数据库。

>>>python manage.py migrate

此时打开mysql将会看到自己所创建的表。

以上用到了那么多的参数不妨我们在这里进行总结:

字符串类:

  • CharField:(表示比较短的字符串要求必须有一个参数max_length=,数据库层和Django层校验字段所允许的最大字符串)
  • TextField:(一个容量很大的文本字段,用