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是通过使用描 ...
随机推荐
- delphi 判断端口(Port)是否被占用(转载)
function IsPortUsed(aPort: Integer): Boolean; var _vSock: TSocket; _vWSAData: TWSAData; _vAddrIn: TS ...
- php中 "$$" 的详解
php中 $$str 这种写法称为可变变量 有时候使用可变变量名是很方便的.就是说,一个变量的变量名可以动态的设置和使用.一个普通的变量通过声明来设置,例如: <?php $a = " ...
- lnmp一键安装包安装失败,或者安装下载缓慢的解决办法
使用阿里云内网安装模块 阿里云外网: ftp://soft6.vpser.net/ 阿里云云内网:ftp://10.163.196.147 修改lnmp.conf 文件 目前可用的国内LNMP ful ...
- Linux笔记 #10# 用于支持Web应用开发&部署&配置的一些自定义脚本
索引 一.本地开发与测试相关脚本 1.startup.sh 2.shutdown.sh 3.catalina-out.sh 4.localhost_access_log.sh 5.上传本地文件到服务器 ...
- 封装一个通用的正则,不再为test和replace所烦恼,eval很棒~
- 使用AtomicLong,经典银行账户问题
1.新建Account类,使用AtomicLong定义账户余额,增加和减少金额方法使用getAndAdd方法. package com.xkzhangsan.atomicpack.bank; impo ...
- rsync+sersync实现代码同步
APP02安装 rsync服务端 yum install rsync vim /etc/rsyncd.conf pid file=/var/rsynclog/rsyncd.pid log file=/ ...
- SPOJ 375 QTREE - Query on a tree
思路 注意本题只能用C,不能用C++ 其他的都和上一题一样 代码 #include <stdio.h> #include <string.h> #define MAXN 100 ...
- vue-router使用 看着篇就够了
官网地址:https://router.vuejs.org/zh/ 先来个自我介绍吧,我就是你们口中的路由,我的作用就是告诉你们怎么到达某地,比如你想去一个地方(前提是这个地方是已经存在的)我会查询我 ...
- mybatis逆向工程失败
[ERROR] Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.6:generate ( ...