django第六课 模型第一讲

1.数据库连接配置:

  django 连接mysql的配置流程:
    - 安装 pymysql pip install pymysql
  - 创建数据库用户
    有创建数据库权限的用户
  - 创建数据库
    

create database crm

- 修改配置
settins

 1 DATABASES = {
 2     ‘default‘: {
 3         ‘ENGINE‘: ‘django.db.backends.mysql‘,
 4         ‘NAME‘: ‘crm‘,
 5         ‘USER‘:‘root‘,
 6         ‘PASSWORD‘:‘‘,
 7         ‘HOST‘:‘101.132.193.205‘,
 8         ‘PORT‘:‘3306‘
 9     }
10 }

- 修改项目文件夹(和settings.py文件所在的目录)下
__init__.py 文件
写上:

1 import pymysql
2 pymysql.install_as_MySQLdb()

- 设置时区 TIME_ZONE = ‘Asia/ShangHai‘ # 北京时间

2.django的ORM系统

-对象关系映射(Object Relational Mapping,简称ORM)! 简单的说就是用面向对象的方式,描述数据库,操作数据库,
达到不用编写SQL语句就能对数据库进行增删改查。

3.模型的创建与激活创建模型

Student的模型,代表啊学生 总结:
1. 每一个模型都是django.db.models.Model的子类
2. 类变量 表示模型中的数据库字段
3. 每一个字段由一个字段类的实例表示
激活模型
1.在项目中注册app
2.运行数据库迁移命令(一定要在项目根目录下)

python mange.py makemigrations teacher

告诉django,我们做了哪些数据库的更改
迁移
sqlmigrate 从迁移获取sql语句

1 (django) [root@iZuf68mx592121gk7l1ca1Z crm]# python3 manage.py sqlmigrate teacher 0001
2 BEGIN;
3 --
4 -- Create model Student
5 --
6 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);
7 COMMIT;

3.运行migrate命令,使迁移生效

python manage.py migrate teacher

# 表名 appname_模型name.lower

4.数据的增删改查

  增:

  第一种方法:

    

In [10]: s1
Out[10]: <Student: Student object (None)>

In [11]: s1 = Student(name = ‘donghao‘,age=25,qq = ‘11111‘)                                                

In [12]: s1.save()                                                                                         

In [13]: Student.objects.all()
Out[13]: <QuerySet [<Student: Student object (1)>]>

第二种方法:

  

 1 In [14]: s2 = Student()
 2
 3 In [15]: s2.name = ‘xinlan‘
 4
 5 In [16]: s2.age = 30
 6
 7 In [17]: s2.save()
 8
 9 In [18]: Student.objects.all()
10 Out[18]: <QuerySet [<Student: Student object (1)>, <Student: Student object (2)>]>
mysql> select * from teacher_student
    -> ;
+----+---------+-----+-----+-------+-------+----------------------------+
| id | name    | age | sex | qq    | phone | c_time                     |
+----+---------+-----+-----+-------+-------+----------------------------+
|  1 | donghao |  25 |   1 | 11111 |       | 2019-02-22 15:17:07.621733 |
|  2 | xinlan  |  30 |   1 |       |       | 2019-02-22 15:19:38.728134 |
+----+---------+-----+-----+-------+-------+----------------------------+
2 rows in set (0.00 sec)

第三种方法:

  

In [7]: Student.objects.create(name=‘weigang‘,age=22)
Out[7]: <Student: weigang-22

第四种方法:

In [8]: Student.objects.all()
Out[8]: <QuerySet [<Student: donghao-25>, <Student: xinlan-30>, <Student: weigang-22>]>

In [9]: s = Student.objects.get_or_create(name = ‘moran‘)                                                  

In [10]: s
Out[10]: (<Student: moran-0>, True)

In [11]: s = Student.objects.get_or_create(name = ‘donghao‘)                                               

In [12]: s
Out[12]: (<Student: donghao-25>, False)

  返回的是一个元祖
  false 代码查询到的
  true 代表创建的

查询:

  查询所有的

  

In [13]: Student.objects.all()
Out[13]: <QuerySet [<Student: donghao-25>, <Student: xinlan-30>, <Student: weigang-22>, <Student: moran-0>]>

  调用的sql语句

  

In [15]: print(res.query)
SELECT `teacher_student`.`id`, `teacher_student`.`name`, `teacher_student`.`age`, `teacher_student`.`sex`, `teacher_student`.`qq`, `teacher_student`.`phone`, `teacher_student`.`c_time` FROM `teacher_student`

查询一条数据:

  

In [16]: Student.objects.get(id=1)
Out[16]: <Student: donghao-25>
In [17]: Student.objects.get(pk=1)
Out[17]: <Student: donghao-25>

查询多条数据

In [18]: res = Student.objects.filter(sex=1)                                                               

In [19]: res
Out[19]: <QuerySet [<Student: donghao-25>, <Student: xinlan-30>, <Student: weigang-22>, <Student: moran-0>]

改:

  改一条数据:

  

In [20]: s =Student.objects.get(name=‘xinlan‘)                                                             

In [21]: s
Out[21]: <Student: xinlan-30>

In [22]: s.age = 16                                                                                        

In [23]: s
Out[23]: <Student: xinlan-16>

另外一种方法:

In [26]: Student.objects.filter(name=‘xinlan‘).update(age=18)
Out[26]: 1

In [27]: Student.objects.get(name=‘xinlan‘)
Out[27]: <Student: xinlan-18>

删除

  

In [31]: s = Student.objects.get(pk=2)                                                                     

In [32]: s
Out[32]: <Student: xinlan-18>

In [33]: s.delete()
Out[33]: (1, {‘teacher.Student‘: 1})

批量删除:

  

In [36]: Student.objects.filter(sex=1).delete()
Out[36]: (3, {‘teacher.Student‘: 3})

  

原文地址:https://www.cnblogs.com/donghao1121/p/10421337.html

时间: 2024-10-11 01:10:20

django第六课 模型第一讲的相关文章

django 第六课 模型第二讲

1.常用的字段类型 官方文档地址 https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types 2.字段的常用参数 https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-options 3.常用查询 通过模型类上的管理器来构造QuerySet 模型类上的管理是啥? 模型类型.objects QuerySet 表示数据库种对象的集合,等同于Select

第二课:第一讲Linux操作系统及常用命令

第二课:第一讲Linux操作系统及常用命令1.liunx中"X"表示图像显示协议X-window有三种:Gnome,KDE,Xface2.windows->.dll(dynamic link library)liunx->.so (shared object)3.认证:authentication授权:authorization审计:audition(通过日志记录下来实现审计机制)4.登录成功后的"[[email protected] root]"是pr

Django框架(六):模型(二) 字段查询、查询集

1. 字段查询 通过模型类.objects属性可以调用如下函数,实现对模型类对应的数据表的查询. 函数名 功能 返回值 说明 get 返回表中满足条件的一条且只能有一条数据. 返回值是一个模型类对象. 参数中写查询条件. 1)如果查到多条数据,则抛异常MultipleObjectsReturned. 2)查询不到数据,则抛异常:DoesNotExist. all 返回模型类对应表格中的所有数据. 返回值是QuerySet类型 查询集 filter 返回满足条件的数据. 返回值是QuerySet类

Django 第六课 【模板继承】

在前端页面开发中,有些代码是需要重复使用的.这种情况可以使用 'include' 标签来实现.也可以使用另外一个比较强大的方式来实现,那就是模板继承.模板继承类似于 'python' 中的类,在父类中可以先定义好一些变量和方法,然后在子类中实现,模板继承也可以在父模板中先定义好一些子模板需要用到的代码.然后子模板直接继承就可以了,并且因为子模板肯定有自己不同的代码,因此可以在父模板中定义一个block接口,然后在子模板再去实现,以下是父模板的代码: {% load static %} <! DO

【C++探索之旅】第一部分第六课:控制流程,随心所至

内容简介 1.第一部分第六课:控制流程,随心所至 2.第一部分第七课预告:函数效应,分而治之 控制流程,随心所至 上一课<[C++探索之旅]第一部分第五课:简易计算器>比较简单,这一课也不难,却很重要. 其实目前来说,基础部分和<C语言探索之旅>有些类似.难免有些重复,毕竟C++从C语言借鉴了不少.不过小编保证之后进入C++的面向对象编程部分,才是精彩中的精彩.敬请期待~ 好了,扯回正题. 大家应该看过不少科幻片吧,其中很大一部分是说电脑发展起来成为人工智能和人类打架的(反正最终都

【C语言探索之旅】 第一部分第六课:条件表达式

内容简介 1.课程大纲 2.第一部分第六课:条件表达式 3.第一部分第七课预告:循环语句 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 运算那点事 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串 预处理 创建你自己的变量类型 文件读写 动

AWS云计算技术分享系列直播课-第一讲课程邀请函

科技的不断创新与演进时刻在改变我们所处的时间,人们从未停止用科技的力量去探索和实现.越来越多的企业和人们正在通过 AWS 重新构建,构建更好的用户体验,构建更强大的业务平台,构建更安全的系统架构- 今天光环云社群为大家带来AWS云计算技术分享系列直播课,帮助大家由浅入深的了解和使用AWS云服务. 直播课程规划如下: 第一讲 快速开始使用AWS 第二讲 计算.存储和访问权限管理 第三讲 利用 Amazon VPC 服务搭建经典 Web 三层架构 第四讲 弹性与负载均衡 第五讲 使用 Amazon

第四课-第一讲04_01_Linux用户管理命令详解

第四课-第一讲04_01_Linux用户管理命令详解1.useradd [option] USERNAME-u UID(大于500且没使用过的)-c 用户说明,COMMENT-d 家目录 HOME-g GID 基本组ID-G GID,....附加值ID-s 默认shell,指定要用的shell的路径-m(常和-k一起用) 强制指定家目录-M 不创建用户家目录环境变量:PATHHISTSIZESHELL:保持当前用户的默认shell的路径/etc/shells:指定了当前系统可用的安全shell/

NeHe OpenGL教程 第六课:纹理映射

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第六课:纹理映射 纹理映射: 在这一课里,我将教会你如何把纹理映射到立方体的六个面. 学习 texture map 纹理映射(贴图)有很多好处.比方说您想让一颗导弹飞过屏幕.根据前几课的知识,我们最可行的办法可能是很多个多边形来构建