django 连接mysql的配置流程:
-
安装 pymysql pip install pymysql
-
创建数据库用户
1 create user 'xiangnan'@'%' identified by '123456';2 grant all on *.* to 'xiangnan'@'%';3 flush privileges;
-
创建数据库
1 CREATE DATABASE IF NOT EXISTS crm;
-
在settings.py中修改配置
1 DATABASES = { 2 'default': { 3 'ENGINE': 'django.db.backends.mysql', 4 'NAME': 'crm', # 数据库名 5 'USER': 'xiangnan', 6 'PASSWORD': '123456', 7 'HOST': '127.0.0.1', 8 'PORT': '3306', 9 }10 }
-
修改项目文件夹(和settings.py文件所在的目录)下
__init__.py
文件 写上:
1 import pymysql2 3 pymysql.install_as_MySQLdb()
6. 设置时区 TIME_ZONE = 'Asia/ShangHai' # 北京时间
2 Django的ORM系统
-对象关系映射(Object Relational Mapping,简称ORM)!
-简单的说就是用面向对象的方式,描述数据库,操作数据库,达到不用编写SQL语句就能对数据库进行增删改查。
-
-
模型如果需要映射到数据库,所在的app必须已注册.
-
一个数据表对应一个模型类,表中的字段,对应模型中的类属性.
1 from django.db import models 2 3 # Create your models here. 4 class Student(models.Model): 5 name = models.CharField(max_length=20) 6 age = models.SmallIntegerField(default=0) 7 sex = models.SmallIntegerField(default=1) 8 qq = models.CharField(max_length=20, default='') 9 phone = models.CharField(max_length=20, default='')10 c_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True)11 12 def __str__(self):13 return 'id=%s,name=%s,age=%s,c_time-%s' % (self.age, self.name, self.age, self.c_time)
-
-
运行数据库迁移命令(一定要在项目根目录下) 执行以上命令创建映射文件,告诉django,我们要做哪些数据库的更改
python mange.py makemigrations teacher
迁移 sqlmigrate 从迁移获取sql语句
1 -- Create model Student 2 3 CREATE TABLE teacher_student ( 4 id integer AUTO_INCREMENT NOT NULL PRIMARY KEY, 5 name varchar(20) NOT NULL, 6 age smallint NOT NULL, 7 sex smallint NOT NULL, 8 qq varchar(20) NOT NULL, 9 phone varchar(20) NOT NULL, 10 c_time datetime(6) NOT NULL);11 COMMIT;
3. 运行migrate命令,使迁移生效
python manage.py migrate
打开数据库我们能看到创建的以app名_模型名的数据表,而其他的一些表格是django自动生成的.
1 mysql> desc teacher_student; 2 +--------+-------------+------+-----+---------+----------------+ 3 | Field | Type | Null | Key | Default | Extra | 4 +--------+-------------+------+-----+---------+----------------+ 5 | id | int(11) | NO | PRI | NULL | auto_increment | 6 | name | varchar(20) | NO | | NULL | | 7 | age | smallint(6) | NO | | NULL | | 8 | sex | smallint(6) | NO | | NULL | | 9 | qq | varchar(20) | NO | | NULL | |10 | phone | varchar(20) | NO | | NULL | |11 | c_time | datetime(6) | NO | | NULL | |12 +--------+-------------+------+-----+---------+----------------+13 7 rows in set (0.00 sec)
注意:如果要删除表,那么可以去django模型中注释掉模型类,然后执行映射的命令,不要手动在命令行里面去删除.
-
工具 djang shell 调试工具
python manage.py shell
-
增
1 # 增-1 2 laoda = Student(name='laoda', age=18) 3 laoda.save() 4 # 增-2 5 laoer = Student() 6 laoer.name = 'laoer' 7 laoer.age = 17 8 laoer.save() 9 # 增-310 Student.objects.create(name='laosan', age=16)11 # 增-412 Student.objects.get_or_create(name='laosi', age=15)
- 查
1 # 查询所有记录对象2 rs = Student.objects.all()3 # 查询一个记录对象4 rs = Student.objects.get(id=1)5 # 获取满足条件的对象6 rs = Student.objects.filter(sex=1)
get()方式返回的是单个对象,如果符合条件的对象有多个,则get报错
1.从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet.
2.QuerySet是可迭代对象.
3.QuerySet支持切片, 不支持负索引.
4.可以用list强行将QuerySet变成列表.
- 改
1 # 改-12 rs = Student.objects.get(name='laoda')3 rs.name = 'xiaoming'4 rs.save()5 # 改-26 Student.objects.filter(name='xiaoming').update(sex=0)7 # 改-38 Student.objects.all().update(sex=1)
- 删
1 Student.objects.get(id=1).delete()2 Student.objects.filter(sex=0).delete()3 Student.objects.all().delete()