### ORM简介
* MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库
* ORM是“对象-关系-映射”的简称,主要任务是:
* 根据对象的类型生成表结构
* 将对象、列表的操作,转换为sql语句
* 将sql查询到的结果转换为对象、列表
* 这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动
* Django中的模型包含存储数据的字段和约束,对应着数据库中唯一的表
![](https://box.kancloud.cn/117f8fc920b32f729d8c94cc996278aa_953x544.png)
* * * * *
### 使用MySql数据库
在虚拟环境中安装mysql包
~~~
pip install mysql-python
~~~
在mysql中创建数据库
~~~
create databases test2 charset=utf8
~~~
打开settings.py文件,修改DATABASES项
~~~
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test2',
'USER': '用户名',
'PASSWORD': '密码',
'HOST': '数据库服务器ip,本地可以使用localhost',
'PORT': '端口,默认为3306',
}
}
~~~
* * * * *
### 开发流程
1. 在models.py中定义模型类,要求继承自models.Model
2. 把应用加入settings.py文件的installed_app项
3. 生成迁移文件
4. 执行迁移生成表
5. 使用模型类进行crud操作
* * * * *
### 使用数据库生成模型类
~~~
python manage.py inspectdb > booktest/models.py
~~~
![](https://box.kancloud.cn/343f05c4e89837999b06b30ba0cfee65_1437x476.jpg)
~~~
# models.py
#!/usr/bin/env python
# -*-coding:utf-8-*-
from django.db import models
# 自定义管理器 筛选被删除的 改写get_queryset() 方法
# 管理器是模型类的属性,用户将对象与数据表映射
# 1.更改查询集
# 2.增加模型类的创建方法,创建模型类对象
class BookInfoManager(models.Manager):
def get_queryset(self):
return super(BookInfoManager, self).get_queryset().filter(isDelete=False)
# 2 初始化类属性的方法第二种 在管理中定义模型类的创建方法 推荐使用这种方法
def create(cls, btitle, bpub_date):
b = BookInfo()
b.btitle = btitle
b.bpub_date = bpub_date
b.bread = 0
b.bcomment = 0
b.isDelete = 0
return b
class BookInfo(models.Model):
btitle = models.CharField(max_length=20)
bpub_date = models.DateTimeField(db_column='pub_date') # 字段别名
bread = models.IntegerField(default=0) # 阅读量
bcomment = models.IntegerField(null=False) # 评论 null= False 评论不能为空
isDelete = models.BooleanField(default=False) # 逻辑删除
# 元选项
class Meta:
db_table = 'bookinfo' # 表名字
# ordering = ['id'] # 排序 会增加数据库开销
book1 = models.Manager() # 原始管理器
book2 = BookInfoManager() # 自定义管理器
# # 1.模型类的init方法不能用(model中有很多方法,不能覆盖),用类方法的方式创建初始化对象
# @classmethod
# def create(cls,btitle,bpub_date):
# b = BookInfo()
# b.btitle = btitle
# b.bpub_date = bpub_date
# b.bread = 0
# b.bcomment = 0
# b.isDelete = 0
# return b
class HeroInfo(models.Model):
hnanme = models.CharField(max_length=10)
hgender = models.BooleanField(default=True)
hcontent = models.CharField(max_length=1000)
isDelete = models.BooleanField(default=False)
book = models.ForeignKey(BookInfo)
~~~
~~~
# views.py
#!/usr/bin/env python
# -*-coding:utf-8-*-
from django.shortcuts import render
from django.db.models import Max, F
from models import *
def index(request):
# list = BookInfo.book1.filter(heroinfo__hcontent__contains='六')
# list = BookInfo.book1.filter(pk__lge=3)
# 聚合函数
# Max1 = BookInfo.book1.aggregate(Max('bpub_date'))
# F对象
# list = BookInfo.book1.filter(bread__gt=20) # 阅读量
list = BookInfo.book1.filter(bread__gt=F('bcomment')) # 阅读量大于评论量
context = {'list1': list,
#'Max1': Max1,
}
return render(request, 'booktest/index.html', context)
~~~
~~~
<!---index.html---->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<ul>
{% for book in list1 %}
<li>{{ book.btitle }}----阅读量[{{ book.bread }}]---评论量{{ book.bcomment }}</li>
{% endfor %}
</ul>
<!--{{ list1 }}-->
<hr>
{{ Max1 }}
</body>
</html>
~~~
- 系统编程
- 1.进程
- 1.1.fork
- 1.2.多个进程能否修改全局变量
- 1.3多次fork的问题
- 1.4.进程的创建-multiprocessing
- 1.5.进程的创建-Process子类
- 1.6.进程池Pool
- 1.7.进程间通信--Queue
- 2.线程
- 2.1.多线程-Threading
- 2.2.threading注意点
- 2.3.多线程-共享全局变量
- 2.4.线程和进程的对比
- 2.5.同步
- 2.6.互斥锁
- 2.7.多线程-非共享数据
- 2.8.死锁
- 2.9.同步应用
- 2.10.生产者与消费者模式
- 2.11.ThreadLocal
- 2.12.异步
- 2.13.GIL的问题
- 网络编程
- 1.网络概述-udp
- 1.1.TCP/IP
- 1.2.端口
- 1.3.ip地址
- 1.4.socket简介
- 1.5.UDP介绍
- 1.6.udp网络程序-发送数据
- 1.7.udp网络程序-发送、接收数据
- 1.8.udp网络程序-端口问题
- 1.9.udp绑定信息
- 2.0.udp网络通信过程
- 2.1.udp应用:echo服务器
- 2.2.udp应用:聊天室
- 2.3.udp总结
- 2.4.udp综合-模拟QQ
- 2.TFTP下载和上传
- 3.TCP/IP
- 3.1.打开浏览器访问百度的过程
- web服务器
- 1.1.MyWebServer.py
- 1.2.MyWebFramework.py
- 正则
- 1.1.re模块
- 1.2.字符
- 1.3.原始字符串
- 1.4.表示数量
- 1.5.表示边界
- 1.6.匹配分组
- 1.7.贪婪和非贪婪
- 数据结构和算法
- 1.引入概念
- 1.1.第一次尝试
- 1.2.算法的提出
- 1.3.第二次尝试
- 1.4.算法效率衡量
- 1.5.算法分析
- 1.6.常见时间复杂度
- 1.7.python内置类型性能分析
- 1.8.数据结构
- 2.顺序表
- 2.1.顺序表的形式
- 2.2.顺序表的结构和实现
- 2.3.顺序表的操作
- 2.4.python中的顺序表
- 3.链表
- 3.1.单向链表
- 3.2.单向循环链表
- 3.3.双向链表
- 4.栈
- 4.1.栈的结构实现
- 5.队列
- 5.1.队列的实现
- 5.2.双端队列
- 6.排序和搜索
- 6.1.冒泡排序
- 6.2.选择排序
- 6.3.插入排序
- 6.4.快速排序
- 6.5.哈希排序
- 6.6.归并排序
- 6.7.常见排序算法效率比较
- 6.8.搜索
- 7.树与树算法
- 7.1.二叉树
- 7.2.二叉树的遍历
- 初识Django
- 1.小白
- 2.初次尝试
- 3.管理站点
- 4.视图
- 5.模板
- django模型
- 1.定义模型
- 2.模型成员
- 3.模型查询
- 4.自连接
- django视图
- django模板
- django高级
- django第三方
- django-git