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. hdu6396(思维+输入挂)

    Swordsman Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): Accept ...

  2. Python3 NameError: name 'open' is not defined处理办法

    一.说明 之前默认以为python的open方法用存哪里都没什么区别的,然后昨天直接在"__del__()"中使用今天同事跑程序时反馈程序报错“Python3 NameError: ...

  3. shell脚本学习之for循环

    1.数字循环 [root@zabbix ~]# for i in {1..10};do echo $(expr $i \* 3);done;36912151821242730 [root@zabbix ...

  4. 遇到的有关iframe的滚动条问题

    今天才发现一个简单有趣的问题,有关iframe的: <div style="height: 800px;overflow: auto;"> <iframe src ...

  5. Spring Boot:定时任务

    在我们开发项目过程中,经常需要定时任务来帮助我们来做一些内容, Spring Boot 默认已经帮我们实行了,只需要添加相应的注解就可以实现 1.pom 包配置 pom 包里面只需要引入 Spring ...

  6. ntopng网络流量实时监控

    ntopng is the next generation version of the original ntop, a network traffic probe that monitors ne ...

  7. SQL Server2008R2循环语句

    单循环语句 declare @i nvarchar(36) declare @LOCNUM nvarchar(36),@OBJECTTYPE nvarchar(36),@LOCDESC nvarcha ...

  8. Factorial(hdu 1124)

    Description The most important part of a GSM network is so called Base Transceiver Station (BTS). Th ...

  9. Win10调整MTU值

    VPN连接后出现可以ping通google.com但是网页打不开的情况,需要修改MTU值,方法如下:用管理员身份运行cmd列出当前各网络的mtu值C:\Windows\system32>nets ...

  10. 使用numpy与matplotlib.pyplot画图

    使用numpy与matplotlib.pyplot画图 1. 折线图 1 # -*- enccoding:utf-8 -*- 2 import numpy as np 3 import matplot ...