2. ORM(对象关系映射)
1. 映射的关系 DB ORM 数据表 <--> 类
数据行 <--> 对象
字段 <--> 属性
2. Django项目使用MySQL数据库
1. 手动创建数据库
2. 配置数据库的连接信息
settings.py 配置 DATABASES 这个配置项
3. 用pymysql代替默认的MySQLdb
在settings.py同目录下的__init__.py文件中
import pymysql
pymysql.install_as_MySQLdb()
4. models.py中创建模型(类)
5. 执行两条命令
1. python manage.py makemigrations --> 将models.py中的改动登记到小本本上
2. python manage.py migrate --> 将改动翻译成SQL语句,去数据库执行
3. 数据库的表之间的关系
1. 外键(ForeignKey) --> 一对多(多对一)
2. 多对多(ManyToManyField) --> 通过第三张表建立多对多的关系 4. 数据库的操作(增删改查)
   1. 单表操作:
1. models.类名.objects.all() --> 查所有
2. models.类名.objects.get(id=1) --> 根据id查单条数据 3. models.类名.objects.get(id=1).delete() --> 删除单条数据 4. 修改
obj = models.类名.objects.get(id=1)
obj.name = "新名字"
obj.save() 5. 新增
models.类名.objects.create(name="张曌")
2. 外键的操作

   # 书籍
class Book(models.Model):
id = models.AutoField(primary_key=True) # 自增的主键
title = models.CharField(max_length=32) # 书籍名称 varchar(32)
publisher = models.ForeignKey(to=Publisher) # 外键关联Publisher这张表 book_obj 代表书的对象
book_obj.publisher 代表和我关联的出版社对象
book_obj.publisher.name 代表和我关联的出版社对象的名字
3. 多对多的操作
# 作者表
class Author(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=16)
# ORM创建多对多字段,会自动在数据库中创建第三张表
books = models.ManyToManyField(to=Book) author_obj --> 一个作者对象 author_obj.books.all() --> 作者出版的所有书(书籍对象的列表)
author_obj.books.set([1,2,3])--> 设置作者关联的书籍(更新的是第三张表)
第二种方式建造多对多关系的表,手动建第三张表

自己总结:
常用字段:
AotuField:会自动生成id的列
IntegerField:整数
CharField:字符类型,必须提供max_length参数
DateField: 日期字段 日期格式为 YYYY--MM--DD
DateTimeField: 日期时间字段 格式为:YYYY--MM--DD HH-MM-SS 字段参数null
可以表示某个字段为空
unique:唯一的
db_index:如果db_index=True,代表此字段设置索引
default:为该字段设置默认值
auto_now_add=True 创建数据记录的时候会把当前时间添加到数据库中 auto_now=True 每次更新数据记录时会更新该字段 on_delete
models.CASCADE:代表删除关联数据,与之关联的也删除

models.DO_NOTHING
删除关联数据,引发错误IntegrityError

models.PROTECT
删除关联数据,引发错误ProtectedError

models.SET_NULL
删除关联数据,与之关联的值设置为null(前提FK字段需要设置为可空)

models.SET_DEFAULT
删除关联数据,与之关联的值设置为默认值(前提FK字段需要设置默认值)

models.SET

删除关联数据,
a. 与之关联的值设置为指定值,设置:models.SET(值)
b. 与之关联的值设置为可执行对象的返回值,设置:models.SET(可执行对象)


to_field 设置要关联的表的字段

def func():
return 10

class MyModel(models.Model):
user = models.ForeignKey(
to="User",
to_field="id",
on_delete=models.SET(func)
)  

db_constraint   在数据库中创建外键约束,默认为True




浅谈ORM操作的更多相关文章

  1. Js之浅谈dom操作

    JavaScript之浅谈dom操作 1.理解dom: DOM(Document Object Model ,文档对象模型)一种独立于语言,用于操作xml,html文档的应用编程接口. 怎么说,我从两 ...

  2. 手撸ORM浅谈ORM框架之基础篇

    好奇害死猫 一直觉得ORM框架好用.功能强大集众多优点于一身,当然ORM并非完美无缺,任何事物优缺点并存!我曾一度认为以为使用了ORM框架根本不需要关注Sql语句如何执行的,更不用关心优化的问题!!! ...

  3. 手撸ORM浅谈ORM框架之Add篇

    快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...

  4. 手撸ORM浅谈ORM框架之Update篇

    快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...

  5. 手撸ORM浅谈ORM框架之Delete篇

    快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...

  6. 手撸ORM浅谈ORM框架之Query篇

    快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...

  7. 从JS和jQuery浅谈DOM操作,当我们在获取时,究竟获取了什么

    0.写在前面的话 自己对前端的东西一直不是很熟,现在开始要想办法从前端各个地方去获取想要的属性值的时候,也基本是在网上现炒现卖,几周下来,发现自己还是迷迷糊糊,可以算是一无所获. 所以就抽时间,把这一 ...

  8. linux的浅谈io操作

    系统默认设定 名称类型文件描述符操作标准输入standard input0<,<< 标准输出standard output1>,>> 标准错误输出standard ...

  9. Django之ORM操作

    Django之ORM操作 前言 Django框架功能齐全自带数据库操作功能,本文主要介绍Django的ORM框架 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计 ...

随机推荐

  1. spring 的aop操作

  2. jQuery-图片的放大镜显示效果(不需要大小图)

    问题:当页面高度很大时,放大图片的图层不会跟随着 1.demo.html ;display:none;}          #tip s   {position:absolute;top:40px;l ...

  3. var_dump — 打印变量的相关信息

    <?php $a = array( 1 , 2 , array( "a" , "b" , "c" )); var_dump ( $a ...

  4. Java3D-对象基本变换

    一个球体与三个圆柱体形成一个组合体,在该组合体中,球体的透明度属性是由全透明到不透明之间变换,而且包括:旋转.平移等变换. package com.vfsd.test0621; import java ...

  5. ZROI2018普转提day1t1

    传送门 分析 我们先二分一下最终的平均值mid,然后让序列中的每一个数都减去这个mid,之后用新序列的前缀和建一棵线段树,枚举起点i,然后求出此时在i+L-1~i+R-1范围内的前缀和的最大值,用这个 ...

  6. 8.View类

    Basic Concepts      在Modle/View 结构中,View从Model中提取数据,并显示给用户.View显示数据的方式不一定与Model中数据排列方式相同,也可能与底层数据结构完 ...

  7. 总结:kathasis如何发送get请求获取数据

    1.进入前端页面,找到对应的模块,开始塞字段数据. 2.如果字段为基本类型,如String,比如website,则在前段界面,右击,inspect,找到对应的代码所处的jsp,跳转到该jsp,通过该j ...

  8. SDUT 3373 数据结构实验之查找一:二叉排序树

    数据结构实验之查找一:二叉排序树 Time Limit: 400MS Memory Limit: 65536KB Submit Statistic Problem Description 对应给定的一 ...

  9. Mysql 大数据量导入程序

    Mysql 大数据量导入程序<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" ...

  10. Java从入门到放弃——05.修饰符static,final,权限修饰符

    本文目标 static final: 权限修饰符:public,private,protected,缺省 1.static 静态修饰符,被static修饰的变量或者方法会被加载进静态区内存,不需要创建 ...