1 数据库的连接配置

django 连接mysql的配置流程:

  1. 安装 pymysql pip install pymysql

  2. 创建数据库用户

 create user 'xiangnan'@'%' identified by '';
grant all on *.* to 'xiangnan'@'%';
flush privileges;
  1. 创建数据库

 CREATE DATABASE IF NOT EXISTS crm;
  1. 在settings.py中修改配置

 DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'crm', # 数据库名
'USER': 'xiangnan',
'PASSWORD': '',
'HOST': '127.0.0.1',
'PORT': '',
}
}
  1. 修改项目文件夹(和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模型映射关系

  1. 模型类必须都写在app下的models.py文件中。

  2. 模型如果需要映射到数据库,所在的app必须已注册.

  3. 一个数据表对应一个模型类,表中的字段,对应模型中的类属性.

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 激活模型

  1. 在项目中注册app

  2. 运行数据库迁移命令(一定要在项目根目录下) 执行以上命令创建映射文件,告诉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模型基础第一节的更多相关文章

  1. Django 学习第六天——Django模型基础第一节

    一.Django 的 ORM 简介: Django的ORM系统的分析: 1.ORM 概念:对象关系映射(Object Relational Mapping,简称ORM) 2.ORM的优势:不用直接编写 ...

  2. 七、Django模型基础第二节——常用查询

    1 常用的模型字段类型 官方文档链接: https://docs.djangoproject.com/en/2.1/ref/models/fields/#field-types 常用的字段类型 模型字 ...

  3. Django 学习第七天——Django模型基础第二节

    User 是自己创建的模型类,等于数据库中的表 常用的查询方法: all():获取所有数据: User.objects.all() first():获取第一条数据: User.objects.firs ...

  4. Django 08 Django模型基础3(关系表的数据操作、表关联对象的访问、多表查询、聚合、分组、F、Q查询)

    Django 08 Django模型基础3(关系表的数据操作.表关联对象的访问.多表查询.聚合.分组.F.Q查询) 一.关系表的数据操作 #为了能方便学习,我们进入项目的idle中去执行我们的操作,通 ...

  5. Django 07 Django模型基础2 (常用查询和多表关联)

    Django 07 Django模型基础2 (常用查询和多表关联) 一.常用查询 #查找数据 def search_user(request): #获取 rs = User.objects.first ...

  6. Django 06 Django模型基础1(ORM简介、数据库连接配置、模型的创建与映射、数据的增删改查)

    Django 06 Django模型基础1(ORM简介.数据库连接配置.模型的创建与映射.数据的增删改查) 一.ORM系统 #django模型映射关系 #模型类-----数据表 #类属性-----表字 ...

  7. Java基础第一节.Java简介

    第一节 Java简介 Java是一个由Sun公司开发而成的新一代的编程语言. Java语言是对软件开发有深远影响.应用前景广泛.具有丰富的类库.继承了C++的传统(摈弃了某些不足)广泛使用的网络编程语 ...

  8. django模型基础(三)

    本文转载自https://blog.csdn.net/xiaogeldx/article/details/88084034 表关系 一对一(OneToOne) 通过本表的主键外键关联另一张表的主键 创 ...

  9. Django 学习第八天——Django模型基础第三节

    一.表关系的实现: 一对一:OneToOne(外键+唯一键) xxx = models.OneToOneField('关联的表',on_delete=models.CASCADE) 外键和一对一关系的 ...

随机推荐

  1. jquery 浮动 固定显示

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>无标题文档 我爱b ...

  2. springboot redis key乱码

    原写法: @Autowired private RedisTemplate redisTemplate; 写入redis后,查看key值 127.0.0.1:6379> keys * 1) &q ...

  3. Win10系列:C#应用控件进阶4

    多边形 若要绘制多边形需要用到Polygon元素,并通过定义一系列的点绘制多边形.Polygon类型的对象有Points属性, 这个属性用来定义组成边的点集.在前台代码中,使用空格分隔各个点,然后利用 ...

  4. 运用python发邮件

    1.网上有许多发送邮件的代码,运行了几次都不成功(使用python3),转用Python2之后,发送成功 2.代码样例: 参考教程:http://www.runoob.com/python/pytho ...

  5. linux 查找指定进程并kill

    ps -ef | grep  php | grep -v 'grep' | awk '{print $2}'| xargs kill -9

  6. Angular2+URL中的 # 引发的思考

    1.先分析 # 的作用 1.1. # 的涵义 #代表网页中的位置.其右面的字符就是该位置的标识符.比如,http://www.example.com/index.html#print就代表网页inde ...

  7. freemarker导出word档

    1.word另存为xml:2.xml文件后缀名改成ftl:3.编写完整json字符串备用:4.修改ftl中动态字段为json中对应字段名:5.编写java代码自动生成word文件:(注意:换行用< ...

  8. SD卡两种操作模式在项目中应用的比较

    1.SDIO接口传输速度比SPI接口传输速度快:2.STM32的SDIO口还真的不好用 特别是4BIT的方式 我都纠结了好久了 用1BIT的方式倒是可以 速度大概可以到读2M字节每秒(STM32F20 ...

  9. Html+css学习笔记二 标题

    学习新标签,标题 <html> <head> <title>tags</title> </head> <body> <h1 ...

  10. JS 函数参数 及 函数数组

    <script> function a(){ alert("a"); } function b(){ alert("b"); } var arr = ...