数据库的链接与配置
1、数据库接口
2、配置mysql数据库
-
安装pymysql(API)
pip install pymysql在对应的虚拟环境中安装:workon -
创建数据库
1、使用能够远程访问的数据库用户 创建一个管理员用户taka账号,密码为 taka: CREATE USER ‘taka’@’%‘IDENTIFIED BY ‘taka’; 给这个用户授予所有远程访问,这个用户主要用于管理整个数据库,备份,还原等操作。 GRANT ALL ON . TO ‘taka’@’%’; 使授权立即生效: FLUSH PRIVILEGES
2、创建数据库
1、 mysql - uroot -pqwe123 show databases; create database CRM (charset=utf8); # 可指定字符编码格式 2、 创建用户名为LC密码为LC的数据库用户,并授予其权限操作数据库,支持远程访问 grant all privileges on CRM.* to 'LC'@'%' identified by 'LC'; flush privilege; # 刷新权限 数据库直接进入的命令 mysql -ufei -pfei -A CRM #-A是库,后面接库名3、修改配置
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'CRM', # 数据库名 'USER': 'develop', # 用户名 'PASSWORD': 'QWEqwe123', 'HOST': '127.0.0.1', 'PORT': 3306, # 虚拟机要做好端口映射 } }4、导入pymysql(API)(项目目录中的__init__.py)

import pymysql pymysql.install_as_MySQLdb()关闭重启服务器
数据库的操作(ORM)
用面向对象(class)的方式去描述数据库操作数据库,达到不用编写sql语句实现增删改查
模型的创建和映射
1、模型文件:teacher/models.py
2、创建模型
from django.db import models
class Student(models.Model):
name = models.CharField(max_length=20) # models.CharField字符串,限制长度为20
age = models.SmallIntegerField() # SmallIntegerField相当于数据库中的tinyint
sex = models.SmallIntegerField(default=1) # 设置默认值
qq = models.CharField(max_length=20)
phone = models.CharField(max_length=20)
c_time = models.DateTimeField(verbose_name='创建时间', auto_now_add=True) # 记录时间,auto_now_add=True自动填充当前时间
# c_time = models.DateTimeField('创建时间', auto_now_add=True) # 第一个参数为位置参数,必须一一对应
3、激活模型
1、检查app是否被注册(settings.py)
2、迁移

python manage,py makemigrations teacher # 指定app生成迁移
python manage,py makemigrations # 全部文件迁移
python manage.py sqlmigrate teacher 0001 # 查看原生sql语句

以上操作完成,保存更改,但是操作还没生效

原生sql语句

3.使迁移生效
python manage.py migrate # 全部迁移
python manage.py migrate teacher


注意:迁移功能非常强大,在开发项目时能随时更改模型,不需要删除数据库或创建新的表----实施升级数据库而不丢失数据
总结:模型修改三个步骤
1、修改模型(创建模型)
2、运行python manage.py makemigrations创建迁移
3、运行python manage.py migrate使迁移生效
数据库的增删改查
进入虚拟环境安装ipython
pip install ipython
python manage.py shell
1、增
from teacher.models import Student #导入模型
# 第一种方式
In [2]: s = Student(name="LC", age=20, qq="12345")
In [3]: s.save() # 需要将创建的对象保存
# 第二种方式,通过创建空实例再属性赋值,同样要保存对象
In [6]: sl = Student()
In [7]: sl.name = "斜光"
In [8]: sl.age = 19
In [9]: sl.save()
# 第三种方式,create直接导入数据库,不需要保存
In [10]: Student.objects.create(name="lc", age=21)
Out[10]: <Student: Student object (3)> # 返回学生对象表示有三条数据
# 第四种方式,先查询,有则返回false,没有则创建
In [13]: s = Student.objects.get_or_create(name="LC") # s用于接收返回值
In [15]: s
Out[15]: (<Student: Student object (4)>, True)
2、查
# 查所有
In [16]: res = Student.objects.all()
In [17]: res
Out[17]: <QuerySet [<Student: Student object (1)>, <Student: Student object (2)>, <Student: Student object (3)>, <Student: Student object (4)>]>
In [18]: print(res.query) # 打印原生sql语句
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 [19]: Student.objects.get(pk=1) # 主键(pk)不一定命名为id,为了避免错误,使用pk,它会自动去找表的主键,而不是字段名
Out[19]: <Student: Student object (1)>
修改模型


修改模型后的查询结果
In [3]: Student.objects.all()
Out[3]: <QuerySet [<Student: LC>, <Student: 斜光>, <Student: lc>, <Student: CL>]>
In [4]: Student.objects.get(pk=1)
Out[4]: <Student: LC>
In [5]: Student.objects.get(pk=2)
Out[5]: <Student: 斜光>
get只能返回一个对象,若同时多个符合条件就会报错
带条件查询
In [6]: Student.objects.filter(age=20) # filter相当于sql语句中的where
Out[6]: <QuerySet [<Student: LC>]>
3、改
# 第一种方式,修改单条数据
In [ ]: s = Student.objects.get(pk=1)
In [17]: s.phone = "17398891960"
In [18]: s.save()
# 第二种方式,通过调用update一次修改多条数据
In [23]: Student.objects.filter(age=20).update(qq='486484')
Out[23]: 2 # 返回值表示修改数据的条数
4、删
# 删除一条数据
In [26]: s.delete()
Out[26]: (1, {'teacher.Student': 1})
# 删除多条数据
In [27]: Student.objects.filter(age=20).delete()
Out[27]: (2, {'teacher.Student': 2})
# 全删
In [29]: Student.objects.all().delete()
Out[29]: (1, {'teacher.Student': 1})
从数据库导入信息到前端页面



本文详细介绍了如何使用Django的ORM与MySQL数据库进行交互,包括数据库的配置、模型的创建与修改、数据的增删改查操作,以及如何在虚拟环境中安装和配置必要的Python库。
&spm=1001.2101.3001.5002&articleId=100749474&d=1&t=3&u=f5f26cb193bf45e586c1b2087e4b9b85)
6500

被折叠的 条评论
为什么被折叠?



