django数据库操作
1.修改项目的 settings 配置,在 settings.py 中配置需要连接的数据库(DATABASES:是用来管理数据库配置,默认是sqlite3)
2.在项目下的__init__.py中进行如下配置
""" setting中的配置默认为sqlite3数据库 当需要修改成MySql时 并且在setting.py的同级目录的__init__.py 加入如下配置 否则会报错: Error loading MySQLdb module. """ import pymysql pymysql.install_as_MySQLdb()
3.实操
3.1创建表
在app文件的models.py文件中 创建Student(学生信息)表
from django.db import models class Student(models.Model): """ 创建如下几个表的字段 """ # 学号 primary_key=True: 该字段为主键 student_num = models.CharField('学号', primary_key=True, max_length=15) # 姓名 字符串 最大长度20 name = models.CharField('姓名', max_length=20) # 年龄 整数 null=False, 表示该字段不能为空 age = models.IntegerField('年龄', null=False) # 性别 布尔类型 默认True: 男生 False:女生 sex = models.BooleanField('性别', default=True) # 手机 unique=True 该字段唯一 mobile = models.CharField('手机', unique=True, max_length=15) # 创建时间 auto_now_add:只有在新增的时候才会生效 create_time = models.DateTimeField(auto_now_add=True) # 修改时间 auto_now: 添加和修改都会改变时间 modify_time = models.DateTimeField(auto_now=True) # 指定表名 不指定默认APP名字——类名(app_demo_Student) class Meta: db_table = 'student'
终端执行如下命令,他的作用是将models文件生成一个迁移文件
python manage.py makemigrations
迁移文件生成完毕,执行
python manage.py migrate
会将迁移文件的内容作用到数据库中,生成表或者修改字段属性
此时,student表创建成功
3.2 插入数据
在app中创建一个.py文件(批量创建一些数据)
# coding:utf-8 """ CreateBY : rongrong Time : 2022/2/24 16:44 """ from django.http import HttpResponse from my_app.models import Student import random def insert(request): # 随机整数 作为学号 for i in range(0, 5): student_num = int(random.uniform(0, 1) * 10000000000) # 从models文件中获取student对象 student = Student() # 给对象赋值 student.student_num = student_num student.name = 'tom' + str(i) student.age = 15 student.sex = random.choice([True, False]) student.mobile = int(random.uniform(0, 1) * 10000000000) # 插入数据 student.save() return HttpResponse('数据插入完毕')
在项目的urls.py 文件中 urlpatterns中配置对应的接口路径
访问http://127.0.0.1:8000/my_api/ ,接口请求成功
student表数据插入成功
3.3 查、改、删
# coding:utf-8 """ CreateBY : rongrong Time : 2022/2/24 16:44 """ from django.http import HttpResponse from my_app.models import Student import random """ 查询 """ def find(request): #sql = 'select * from student' # django 也可以执行原生的sql语句 #result = Student.objects.raw(sql) # 查询name = tom1的数据 result = Student.objects.filter(name='tom1') """ result为<class 'django.db.models.query.QuerySet'>的对象 需要进行数据处理 """ arr = [] for i in result: content = {'学号': i.student_num, '姓名': i.name, '性别': i.sex} arr.append(content) print(arr) print(type(arr)) return HttpResponse(arr) """ 修改 """ def modify(request,student_num): # 接口访问失败 # 通过学号获取student对象 student = Student.objects.get(student_num=student_num) # 设置student的name为jack student.name = 'jack' student.save() return HttpResponse('修改成功.') """ 删除 """ def delete(request, student_num): student = Student.objects.get(student_num=student_num) student.delete() return HttpResponse('删除成功.')
注:url动态传值时,需要使用re_path函数(或者url)
4.已有数据库表反向生成对应的Model
在控制台输入一下命令,则会打印数据库中所有表的model内容
python manage.py inspectdb
将生成的Model数据直接写入文件中
python manage.py inspectdb > my_app\double # >后面跟文件路径
将某一表数据Model数据追加至文件最后
python manage.py inspectdb --database default student >> my_app double
关联多个数据库时,指定库生成Model文件
python manage.py inspectdb --database=sit > saas\readme