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<br>
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:(一个容量很大的文本字段,用<textarea>表示该字段数据)
  • EmailField:(带有检查email合法性的字段)
  • ImageField:(验证上传对象是否会合法的照片,有两个可选参数:height_field,width_field)
  • FileField:(文件上传字段,要求必须有参数:upload_to,一个保存上载文件的本地文件路径)
  • URLField:(用于保存URL)
  • IPAddressField:(一个字符串形式的IP地址)
  • CommaSeparatedIntegerField:(用于存放逗号分隔符分开的整数,必须要有max_length)

时间段:

  • DataTimeField:(日期时间字段)
  • DataField:(一个日期字段,可选参数为:Argument 描述,auto_now对象被保存时时间设置为当前时间)

数字字段:

  • IntegerField:(用于保存一个整数)
  • FloatField:(保存一个浮点数,必须有两个参数:max_digits:总位数,decimal_places:小数位数)
  • AutoField:(一个IntegerField,添加记录时会自动增长,一般不需要直接使用这个字段,自定义一个主键必须要有的参数为:primary_key=Ture

枚举字段:

  • choice = (
        (1,'football'),
        (2,'basketball'),
        (3,'others'))
    ball = models.IntegerField(choices = choice)  

     

模型之间的关系有三种:一对一,一对多,多对的。

一对一:就是主外键的基础上,给外键加了一个UNIQUE=Ture的属性

一对多:就是主键与外键的关系

多对多:自动创建第三张表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值