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. 关于android通过shell修改文件权限的学习

    首先是文件的读写属性(下图): 要通过shel命令l修改文件权限: 1.首先在cmd里输入adb shell 命令进入编辑模式 2.用cd命令进入到想要修改的文件目录,不知道的时候可以用ls 命令列表 ...

  2. css知多少(11)——position(转)

    css知多少(11)——position   1. 引言 本文将用一篇文章介绍position(定位),在学习position之前,我们应该去思考一个问题:什么情况下我们需要定位?如果没有定位将无法满 ...

  3. Ros学习——roslaunch

    roslaunch:启动定义在launch文件中的多个节点 1.launch文件解析 <launch> #以launch标签开头以表明这是一个launch文件 #两个节点分组并以'命名空间 ...

  4. Struts2框架06 ValueStack

    原文地址:点击前往 1 什么是ValueStack 称为值栈,Struts提供的共享数据的数据结构 2 为什么要使用ValueStack 从控制器向浏览器传递数据 存储与请求相关的对象信息(sessi ...

  5. Action层, Service层 和 Dao层的功能区分

    Action/Service/DAO简介:  Action是管理业务(Service)调度和管理跳转的. Service是管理具体的功能的. Action只负责管理,而Service负责实施. DAO ...

  6. 除了ROS ,机器人自主定位导航还能怎么做?

    博客转载自:https://www.leiphone.com/news/201609/10QD7yp7JFV9H9Ni.html 雷锋网(公众号:雷锋网)按:本文作者科技剪刀手,思岚科技技术顾问. 随 ...

  7. GCD 学习(四) dispatch_group

    如果想在dispatch_queue中所有的任务执行完成后在做某种操作,在串行队列中,可以把该操作放到最后一个任务执行完成后继续,但是在并行队列中怎么做呢.这就有dispatch_group 成组操作 ...

  8. Luogu 3168 [CQOI2015]任务查询系统

    区间修改单点查询,又观察到是一个k小,考虑主席树上做差分 一开始样例疯狂挂,后来发现主席树在一个历史版本上只能修改一次,所以要开2*n个根结点,记录一下每个时间对应的根结点编号 然后80分,考虑到当一 ...

  9. vue 之 nodejs中npm的使用

    npm是什么? 简单的说,npm就是JavaScript的包管理工具.类似Java语法中的maven,gradle,python中的pip. 安装包 我们在桌面上创建一个文件夹/01-studyNpm ...

  10. LeetCode第70题:爬楼梯

    问题描述 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解 ...