设为首页 加入收藏

TOP

Django之ORM(一)
2018-11-14 18:12:15 】 浏览:231
Tags:Django ORM

#ORM

>ORM即Object Relational Mapping(对象关系映射)

对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换  。从效果上说,它其实是创建了一个可在编程语言里使用的--“虚拟对象数据库”。

 

在Django中具体的对应方式为:

* 类名对应数据库中的表名

* 类名对应数据库中的表名

* 类属性对应数据库里的字段

* 类实例对应数据库表里的一行数据

* 类实例对象的属性对应这行中的字段的值

 

#一.数据库的连接

Django默认使用的是sqlite,如果想使用mysql来存储数据,需要改变成相应的数据库引擎,具体如下:

######1.修改setting文件

```python

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}

```

改成

```python

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

```

######2.引入pymysql驱动

在__init__.py文件中加上

```python

import pymysql
pymysql.install_as_MySQLdb()

```

#二.表的创建

###1.一个简单的创建

数据库表的创建在ORM中就是类的创建。

```python

class student(models.Model):
name=models.CharField(max_length=20)
num=models.IntegerField()
school=models.ForeignKey(school,on_delete=models.CASCADE)
teacher=models.ManyToManyField(teacher)
def __str__(self):
return self.name

```

```python

class school(models.Model):
name = models.CharField(max_length=20)
def __str__(self):
return self.name


class teacher(models.Model):
name = models.CharField(max_length=20)
def __str__(self):
return self.name

```

首先在models.py中简单的创建了三个表,然后需要在当前项目有manage.py文件目录下的cmd或者pycharm中的terminal下执行如下命令来同步数据库:

```python

python manage.py makemigrations  #为模型改变生成迁移文件

python manage.py migrate    #应用数据库迁移

```

这时在数据库中就会显示有这3张表了

 ###2.字段的类型与参数

几个常用的类型:

* CharField

* IntegerField

* TextField

* 等等

 

几个常用的参数:

* null

* default

* primary_key

* unique

* 等等

 

具体参考Django官方文档https://docs.djangoproject.com/en/2.1/ref/models/fields/

###3.表与表之间的关联

######1.外键

即一对多的关系

```python

school=models.ForeignKey(school,on_delete=models.CASCADE)

```

在建表时为school添加外键约束,在数据库中的显示为

这里的id是自动创建的,school_id是school添加外键产生的

如果想要与另一张表的其他字段添加外键,需要在加上参数to_filed='字段名',同时这个字段必须是unique=True

######2.一对一

一对一的创建即在外键创建好后给school_id添加UNIQUE=True的属性

######3.多对多

```python

teacher=models.ManyToManyField(teacher)

```

这样Django会默认添加一张表为

表示多对多的关系。

除了这种方式也可以手动创建一个表,手动添加两个外键来实现多对多。

#三.增删改查

增删改查的操作会在视图函数中进行,所以要先引入到views.py中

```python

from blog.models import *

```

###1.增加

######1.普通字段

create方式

```python

student.objects.create(name="student1",num=1,school=school_obj)
或者
student.objects.create(**{"name":"student1","num"="1","school"=obj"})

```

save方式

```python

student_obj=student(

name="student1",num=1,school=school_obj

)

student_obk.save()

或者

student_obj=student()

student_obj.name="student1"

student_obj.num=1

student_obj.school=school_obj

```

######2.一对多关系的字段

直接设置外键的id

在student.objects.create中加

```python

school_id=1

```

通过获取外键对象设置

```python

obj = school.objects.get(name="school1")
student.objects.create(**{"name":"student2","num":2,"school":obj})

```

######3.多对多关系的字段

```python

teacher1=teacher.objects.get(id=1)
teacher2=teacher.objects.get(id=2)
student1=s
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇django配置发送邮箱 下一篇python+scrapy环境搭建步骤描述

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目