django模型系统(一)
django模型系统(一)
djangode ORM
ORM:对像关系映射
用python概念去表达数据库
数据库配置(mysql)
- 安装pumysql
- 修改项目目录下的
__init__.py
import pymysql
pymysql.install_as_MySQLdb()
- 手动创建一个当前项目的空数据库,准备一个有创建数据库权限的用户
(推荐使用Navicat,方便;也可用命令行) - 在settings配置
- 找到databases
- 配置修改为:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'crm',#数据库名
'USER':'admin',#用户名
'PASSWORD':'Root110qwe',#密码
'HOST':'127.0.0.1',#主机地址
'PORT':'3306'#端口地址
}
补充Navicat的数据库连接
- 注意:如果虚拟机上的,虚拟机记得写好端口映射

模型的创建与映射
创建
模型就是django.db.modles.Model的一个子类。
- 关系

模型定义在app文件夹下的models.py文件
例如:

映射
即:激活模型
- 注册应用app
- 创建迁移,每一个迁移文件都会有一个迁移编号
- 每次修改模型都要重新创建
python manage.py makemigrations appname#不写name就代表迁移所有的注册了的app
例如:

注意:此时数据库无表,此命令仅仅只是告诉Djano,修改了模型,不会操作数据库
如果我们想看,我们的更改,会对数据库产生什么影响,我们可以看执行什么sql语句
使用命令:
python manage.py sqlmigrate appname filenum
例如:
(crm) pyvip@Vip:~/project/crm$ python manage.py sqlmigrate teacher 0001
- 执行迁移:操作数据库,将对模型的改动应用到数据库(底层就是执行了sql)
- 命令:
python manage.py migrate appname
- 模型映射到数据库中是一张表 ,表名 = appname_模型name(小写)
- 例如上面的student表:teacher_student
- 执行命令的动作:
- 在app中查找迁移文件,并且去django_migrations(系统自建的一张表)表中查找,如果有没有执行的迁移文件,就去执行它
- 执行了迁移生成的sql语句
- 如果成功,会在django_migrations表中增加一条记录
- django_migrations表中有记录的信息,系统将不会执行记录中的文件的迁移
简单的数据的增删查改
django调试环境
进入命令(虚拟机的):
python manage.py shell
增
# 第一种方式
In [3]: s = Student()
In [5]: s.name = '心蓝'
In [6]: s.age = 18
In [7]: Student.objects.all()
Out[7]: <QuerySet []>
In [8]: s.save() # save之后才会写到数据库
# 第二种方式
stu = Student.objects.create(name='敬子明', age=10) # 直接创建
删
In [12]: stu.delete()
Out[12]: (1, {'teacher.Student': 1})
# 删除多条
In [12]: Student.objects.filter(sex=1).delete()
Out[12]: (1, {'teacher.Student': 1})
改
# 改一条
In [16]: s.age = 16
In [17]: s.save()
# 改多条
In [10]: Student.objects.all().update(sex=0)
Out[10]: 2
查
# 查所有
In [2]: Student.objects.all()
Out[2]: <QuerySet [<Student: 心蓝>, <Student: 敬子明>]>
# 查一条
In [3]: Student.objects.get(pk=1)
Out[3]: <Student: 心蓝>
# get 返回的是对象 如果返回了多值就会报错
# 带条件
In [8]: res = Student.objects.filter(sex=1) # where sex=1
In [9]: res
Out[9]: <QuerySet [<Student: 心蓝>, <Student: 敬子明>]>
django模型系统(一)的更多相关文章
- django模型系统(二)
django模型系统(二) 常用查询 每一个django模型类,都有一个默认的管理器,objects QuerySet表示数据库中对象的列表.他可以有0到国歌过滤器.过滤器通过给定参数,缩小查询范围( ...
- Django模型系统——ORM校园管理系统代码
1.models.py from django.db import models # Create your models here. class Class(models.Model): id = ...
- 八.django模型系统(二)之常用查询及表关系的实现
Ⅰ.常用查询 1.几个概念 每一个django模型类,都有一个默认的管理器,objects,查询就是依赖于objects管理器进行的(在创建时就被添加了). QuerySet表示数据库中对象的列表( ...
- django模型系统二
常用查询及表关系的实现 1.常用查询 每一个django模型类,都有一个默认的管理器 objects QuerySet表示数据库中对象的列表,它可以有0到多个过滤器.过滤器通过给定参数,缩小查询范围. ...
- Django 模型系统(model)&ORM--进阶
QuerySet 可切片 使用Python 的切片语法来限制查询集记录的数目 .它等同于SQL 的LIMIT 和OFFSET 子句. >>> Entry.objects.all()[ ...
- 七.django模型系统(一)
Ⅰ.django的ORM 1.含义 对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语 ...
- python的Web框架,Django模型系统二,模型属性,及数据库进阶查询
原始数据接上篇文章来操作.可能需要查看后才能懂.点击这里查看 1.常用的模型字段类型 官方文档:https://docs.djangoproject.com/en/2.1/ref/models/fie ...
- Django 模型系统(model)&ORM--基础
ORM 映射关系: 类 ---> 表 属性 ---> 字段 对象 --->一条数据 创建表(建立模型) 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作 ...
- Django模型系统——ORM
一.概论 1.ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术. 简单的说,ORM是通过使用描 ...
随机推荐
- Centos7上安装、破解bamboo6.0.3
1.下载bamboo安装包,地址:https://www.atlassian.com/software/bamboo/download?_ga=2.65378349.245489969.1512876 ...
- 【转载】常用精品API接口汇总
原文链接戳这里~~ 下面列举了100多个国内常用API接口,并按照 笔记.出行.词典.电商.地图.电影.即时通讯.开发者网站.快递查询.旅游.社交.视频.天气.团队协作.图片与图像处理.外卖.消息推送 ...
- IDEA Failed to load dx.jar
IDEA-177053 Android app crashes on build "Failed to load dx.jar" Error:Android Pre Dex: [c ...
- django进阶开发(一)--session
基于cookie做用户验证时:敏感信息不适合放在cookie中 session依赖cookie session原理 cookie是保存在用户浏览器端的键值对 session是保存在服务器端的键值对 s ...
- javascript ----字符串的使用
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- 软件目录结构规范(以python为例)
为什么要设计好目录结构 "设计项目目录结构",就和"代码编码风格"一样,属于个人风格问题.对于这种风格上的规范,一直都存在两种态度: 一类同学认为,这种个人 ...
- CentOS7开放端口号
查看所有开放的端口号 firewall-cmd --zone=public --list-ports 或者 firewall-cmd --permanent --list-ports(--perman ...
- python list用法
a = ['张三','李四','赵六','王五'] #打印列表 print(a) #增 a.apppend('徐七') print(a) a.insert(1,'张六') print(a) #删 a. ...
- jsp页面在Android系统和ISO系统的兼容性问题
问题:一个jsp页面在Android手机上显示正常,但到了ISO系统上jsp页面的样式不显示了. 原因:css文件中设置样式时单位不兼容. 解决方案:将rem 转换成px;
- Python 运维之路
第一章:Python基础知识 1.Python 变量了解 .Python 二进制 .Python 字符编码 4.Python if条件判断 5.Python while循环 6.Python for循 ...