六、Django模型基础第一节
1 数据库的连接配置
django 连接mysql的配置流程:
安装 pymysql pip install pymysql
创建数据库用户
create user 'xiangnan'@'%' identified by '';
grant all on *.* to 'xiangnan'@'%';
flush privileges;
创建数据库
CREATE DATABASE IF NOT EXISTS crm;
在settings.py中修改配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'crm', # 数据库名
'USER': 'xiangnan',
'PASSWORD': '',
'HOST': '127.0.0.1',
'PORT': '',
}
}
修改项目文件夹(和settings.py文件所在的目录)下
__init__.py
文件 写上:
import pymysql pymysql.install_as_MySQLdb()
6. 设置时区 TIME_ZONE = 'Asia/ShangHai' # 北京时间
2 Django的ORM系统
-对象关系映射(Object Relational Mapping,简称ORM)!
-简单的说就是用面向对象的方式,描述数据库,操作数据库,达到不用编写SQL语句就能对数据库进行增删改查。
3 模型的创建与激活
3.1 Django模型映射关系
模型类必须都写在app下的models.py文件中。
模型如果需要映射到数据库,所在的app必须已注册.
一个数据表对应一个模型类,表中的字段,对应模型中的类属性.
3.2 创建模型
每一个模型都是django.db.models.Model的子类
from django.db import models # Create your models here.
class Student(models.Model):
name = models.CharField(max_length=20)
age = models.SmallIntegerField(default=0)
sex = models.SmallIntegerField(default=1)
qq = models.CharField(max_length=20, default='')
phone = models.CharField(max_length=20, default='')
c_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True) def __str__(self):
return 'id=%s,name=%s,age=%s,c_time-%s' % (self.age, self.name, self.age, self.c_time)
3.3 激活模型
在项目中注册app
运行数据库迁移命令(一定要在项目根目录下) 执行以上命令创建映射文件,告诉django,我们要做哪些数据库的更改
python mange.py makemigrations teacher
命令后面可以跟app名称,表示指定对某个app的模型进行映射,没写则所有的app都执行.
迁移 sqlmigrate 从迁移获取sql语句
-- Create model Student CREATE TABLE teacher_student (
id integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
name varchar(20) NOT NULL,
age smallint NOT NULL,
sex smallint NOT NULL,
qq varchar(20) NOT NULL,
phone varchar(20) NOT NULL,
c_time datetime(6) NOT NULL);
COMMIT;
3. 运行migrate命令,使迁移生效
python manage.py migrate
执行以上命令,将映射文件中的映射数据提交到数据库中
打开数据库我们能看到创建的以app名_模型名的数据表,而其他的一些表格是django自动生成的.
mysql> desc teacher_student;
+--------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(20) | NO | | NULL | |
| age | smallint(6) | NO | | NULL | |
| sex | smallint(6) | NO | | NULL | |
| qq | varchar(20) | NO | | NULL | |
| phone | varchar(20) | NO | | NULL | |
| c_time | datetime(6) | NO | | NULL | |
+--------+-------------+------+-----+---------+----------------+
7 rows in set (0.00 sec)
注意:如果要删除表,那么可以去django模型中注释掉模型类,然后执行映射的命令,不要手动在命令行里面去删除.
4 数据的增删改查
工具 djang shell 调试工具
python manage.py shell
增
# 增-1
laoda = Student(name='laoda', age=18)
laoda.save()
# 增-2
laoer = Student()
laoer.name = 'laoer'
laoer.age = 17
laoer.save()
# 增-3
Student.objects.create(name='laosan', age=16)
# 增-4
Student.objects.get_or_create(name='laosi', age=15)
- 查
# 查询所有记录对象
rs = Student.objects.all()
# 查询一个记录对象
rs = Student.objects.get(id=1)
# 获取满足条件的对象
rs = Student.objects.filter(sex=1)
all()和filter()方法返回的是QuerySet对象
get()方式返回的是单个对象,如果符合条件的对象有多个,则get报错
1.从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet.
2.QuerySet是可迭代对象.
3.QuerySet支持切片, 不支持负索引.
4.可以用list强行将QuerySet变成列表.
- 改
# 改-1
rs = Student.objects.get(name='laoda')
rs.name = 'xiaoming'
rs.save()
# 改-2
Student.objects.filter(name='xiaoming').update(sex=0)
# 改-3
Student.objects.all().update(sex=1)
- 删
Student.objects.get(id=1).delete()
Student.objects.filter(sex=0).delete()
Student.objects.all().delete()
5 总结
六、Django模型基础第一节的更多相关文章
- Django 学习第六天——Django模型基础第一节
一.Django 的 ORM 简介: Django的ORM系统的分析: 1.ORM 概念:对象关系映射(Object Relational Mapping,简称ORM) 2.ORM的优势:不用直接编写 ...
- 七、Django模型基础第二节——常用查询
1 常用的模型字段类型 官方文档链接: https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types 常用的字段类型 模型字 ...
- Django 学习第七天——Django模型基础第二节
User 是自己创建的模型类,等于数据库中的表 常用的查询方法: all():获取所有数据: User.objects.all() first():获取第一条数据: User.objects.firs ...
- Django 08 Django模型基础3(关系表的数据操作、表关联对象的访问、多表查询、聚合、分组、F、Q查询)
Django 08 Django模型基础3(关系表的数据操作.表关联对象的访问.多表查询.聚合.分组.F.Q查询) 一.关系表的数据操作 #为了能方便学习,我们进入项目的idle中去执行我们的操作,通 ...
- Django 07 Django模型基础2 (常用查询和多表关联)
Django 07 Django模型基础2 (常用查询和多表关联) 一.常用查询 #查找数据 def search_user(request): #获取 rs = User.objects.first ...
- Django 06 Django模型基础1(ORM简介、数据库连接配置、模型的创建与映射、数据的增删改查)
Django 06 Django模型基础1(ORM简介.数据库连接配置.模型的创建与映射.数据的增删改查) 一.ORM系统 #django模型映射关系 #模型类-----数据表 #类属性-----表字 ...
- Java基础第一节.Java简介
第一节 Java简介 Java是一个由Sun公司开发而成的新一代的编程语言. Java语言是对软件开发有深远影响.应用前景广泛.具有丰富的类库.继承了C++的传统(摈弃了某些不足)广泛使用的网络编程语 ...
- django模型基础(三)
本文转载自https://blog.csdn.net/xiaogeldx/article/details/88084034 表关系 一对一(OneToOne) 通过本表的主键外键关联另一张表的主键 创 ...
- Django 学习第八天——Django模型基础第三节
一.表关系的实现: 一对一:OneToOne(外键+唯一键) xxx = models.OneToOneField('关联的表',on_delete=models.CASCADE) 外键和一对一关系的 ...
随机推荐
- hdu6396(思维+输入挂)
Swordsman Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): Accept ...
- Python3 NameError: name 'open' is not defined处理办法
一.说明 之前默认以为python的open方法用存哪里都没什么区别的,然后昨天直接在"__del__()"中使用今天同事跑程序时反馈程序报错“Python3 NameError: ...
- shell脚本学习之for循环
1.数字循环 [root@zabbix ~]# for i in {1..10};do echo $(expr $i \* 3);done;36912151821242730 [root@zabbix ...
- 遇到的有关iframe的滚动条问题
今天才发现一个简单有趣的问题,有关iframe的: <div style="height: 800px;overflow: auto;"> <iframe src ...
- Spring Boot:定时任务
在我们开发项目过程中,经常需要定时任务来帮助我们来做一些内容, Spring Boot 默认已经帮我们实行了,只需要添加相应的注解就可以实现 1.pom 包配置 pom 包里面只需要引入 Spring ...
- ntopng网络流量实时监控
ntopng is the next generation version of the original ntop, a network traffic probe that monitors ne ...
- SQL Server2008R2循环语句
单循环语句 declare @i nvarchar(36) declare @LOCNUM nvarchar(36),@OBJECTTYPE nvarchar(36),@LOCDESC nvarcha ...
- Factorial(hdu 1124)
Description The most important part of a GSM network is so called Base Transceiver Station (BTS). Th ...
- Win10调整MTU值
VPN连接后出现可以ping通google.com但是网页打不开的情况,需要修改MTU值,方法如下:用管理员身份运行cmd列出当前各网络的mtu值C:\Windows\system32>nets ...
- 使用numpy与matplotlib.pyplot画图
使用numpy与matplotlib.pyplot画图 1. 折线图 1 # -*- enccoding:utf-8 -*- 2 import numpy as np 3 import matplot ...