Django下mysql数据库的相关操作(创建数据表、以及增删查改)
来源:互联网 发布:在线视频gif制作软件 编辑:程序博客网 时间:2024/06/07 17:25
如有疑惑或错误之处可评论或邮箱联系博主:xuwang.me@gmail.com
本文主要记录了在django下使用mysql数据库时的相关操作,包括创建数据库、数据表、以及增删查改。
博主开发环境:Ubuntu16.04,python2.7,django1.11,mysql5.7
- 数据库(database)创建
- 数据表(table)创建
- 数据库的增删查改四个基本操作
本文采用的数据模型
假设我们以某校学生信息例,针对其数据存储创建一个简单的数据模型:
学生信息的存储进行分学院存储,例如计算机学院,电子工程学院等等。该部分我们对应College模型,有字段学院名name, 描述description(学院信息的相关介绍), 管理人员manager。
在每个学院中细分为各个专业。对应模型Major,有字段专业名name, 外键College(College与Major为一对多关系)。
在每个班级中,存储每个学生的个人信息。对应Student模型,有字段学生姓名name, 学号student_id, 外键Major(Major与Student为一对多关系)。
1. 数据库student_info的创建
在电脑上安装完mysql数据库的前提下,我们使用sql语句创建student_info数据库
CREATE DATABASE student_info
2. 数据表的创建
自定义table名字方法:
为节省你的时间,Django 会根据模型类的名称和包含它的应用的名称自动指定数据库表名称。一个模型的数据库表名称,由这个模型的“应用标签”(在manage.py startapp中使用的名称)和模型类名称之间加上下划线组成。
举个例子, bookstore应用(使用 manage.py startapp bookstore 创建),里面有个名为 Book的模型,那数据表的名称就是 bookstore_book 。
我们也可以使用 Meta类中的 db_table 参数来重写数据表的名称。
在 MySQL中使用小写字母为表命名
当你通过db_table覆写表名称时,强烈推荐使用小写字母给表命名,特别是如果你用了MySQL作为后端。详见MySQL注意事项 。
在这里我们展示自己为数据表命名的代码块:
from __future__ import unicode_literalsfrom django.db import modelsclass Test(models.Model): name = models.CharField(max_length=20, primary_key=True)#primary_key=True表示个自定义主键字段,只要在某个字段上制定primary_key=True #如果 Django 看到你显式地设置了 Field.primary_key,就不会自动添加 id 列。#max_length表示允许输入的最大字符个数 class Meta: db_table = "self_table_name"
相关说明:
每个字段有一些特有的参数。例如,CharField(和它的派生类)需要max_length 参数来指定VARCHAR 数据库字段的大小。
还有一些适用于所有字段的通用参数。 这些参数在参考中有详细定义,这里我们只简单介绍一些最常用的:
null
如果为True,Django 将会把数据库中空值保存为NULL。默认值是 False.
blank
如果为True,该字段允许为空值,默认为False。
要注意,这与 null 不同。null纯粹是数据库范畴,指数据库中字段内容是否允许为空,而 blank 是表单数据输入验证范畴的。如果一个字段的blank=True,表单的验证将允许输入一个空值。如果字段的blank=False,该字段就是必填的。
针对本文所采用的数据模型创建三个数据表:
代码块如下:
from __future__ import unicode_literalsfrom django.db import modelsfrom django.contrib.auth.models import Userclass College(models.Model): name = models.CharField(max_length=30) description = models.CharField(max_length=100) manager = models.ForeignKey(User, blank=True, null=True) def __str__(self): return self.nameclass Major(models.Model): name = models.CharField(max_length=30) colleage= models.ForeignKey(College, on_delete=models.CASCADE, related_name='majors') def __str__(self): return self.nameclass Student(models.Model): name = models.CharField(max_length=30) student_id = models.IntegerField() major = models.ForeignKey(Major, on_delete=models.CASCADE) def __str__(self): return self.name
相关说明:
- 外键ForeignKey()
在模型中定义外键时,同步数据库后,django默认在外键字段名后加上”_id”作为数据库表的列名。
ForeignKey()相关参数如下:
1.1 - - - - on_delete:
当删除 “一” 模型对象时,django会根据该参数的值对与该对象相关联的其他对象(也就是 ‘多’)进行操作。
默认为models.CASCADE 级联删除。当删除’一’时,‘多’会被删除。modles.PROTECT : 当删除一个具有外键关系的对象时,会引发一个异常,阻止删除该对象
models.SET_NULL: 设置删除对象所关联的外键字段为null。但字段的null属性必需为True
models.SET_DEFAULT : 设置删除对象所关联的外键字段为默认的值。
models.SET(value) :设置删除对象所关联的对象的外键字段为value,value也可以是一个可调用函数。
1.2 - - - - related_name
反向查询: 如我们在Major模型的外键major字段中设置realted_name=’majors’,可以在关系的另一端,即College端反向查询到Major
注意:每一次修改模型后,我们都需要确保运行manage.py makemigrations 给应用生成迁移脚本,并接着运行manage.py migrate
3. 数据库的增删查改四个基本操作
增加
from django.http import HttpResponsefrom testModel.models import Test# 添加数据def dbInsert(request): test1 = Test(name='insert context') test1.save() return HttpResponse("<p>数据添加成功!</p>")
删除
from django.http import HttpResponsefrom testModel.models import Test# 删除数据def dbDelete(request): # 删除id=1的数据 test1 = Test.objects.get(id=1) test1.delete() # 另外一种方式 # Test.objects.filter(id=1).delete() # 删除所有数据 # Test.objects.all().delete() return HttpResponse("<p>删除成功</p>")
查找
from django.http import HttpResponsefrom testModel.models import Test#获取数据def dbGet(request): # 通过objects这个模型管理器的all()获得所有数据行,相当于SQL中的SELECT * FROM list = Test.objects.all() # filter相当于SQL中的WHERE,可设置条件过滤结果 response2 = Test.objects.filter(id=1) # 获取单个对象 response3 = Test.objects.get(id=1) # 限制返回的数据 相当于 SQL 中的 OFFSET 0 LIMIT 2; Test.objects.order_by('name')[0:2] # 数据排序 Test.objects.order_by("id") # 上面的方法可以连锁使用 Test.objects.filter(name="name context").order_by("id") # 输出所有数据 for var in list: response1 += var.name + " " response = response1 return HttpResponse("<p>" + response + "</p>")
修改
from django.http import HttpResponsefrom testModel.models import Test# 更改数据def dbUpdate(request): # 修改其中一个id=1的name字段,再save,相当于SQL中的UPDATE test1 = Test.objects.get(id=2) test1.name = 'name_update' test1.save() # 另外一种方式 # Test.objects.filter(id=1).update(name='name_update') # 修改所有的列 # Test.objects.all().update(name='name_update') return HttpResponse("<p>修改成功</p>")
- Django下mysql数据库的相关操作(创建数据表、以及增删查改)
- android下数据库的创建和增删改查操作
- 数据库的创建,数据库的操作(增删改查)
- MySQL---操作数据表基本操作(增删改查)
- iOS-->sqlite数据库,数据表创建,数据的增删改查
- MySQL 数据库 数据表 增删改查
- Django 操作Mysql数据库 对表进行增删改查
- 数据库的创建以及增删改查的操作(轮子)
- django数据库基本操作增删改查
- java对数据库中数据表的增删改查(基于MySQL数据库)
- MySQL数据库如何创建表格以及增删改查
- 第六章:Django对mySQL数据库的增删改查操作
- django数据库基本操作-增删改查(tip)-基本
- 数据库的创建以及对数据库的增删改查
- 创建数据库以及增删改查
- 关于JDBC 对数据库进行创建以及简单的增删改查操作
- MySQL增删改查以及表的创建与删除
- php操作mysql数据库的连接语句以及最简单的增删改查语句
- 大数据系统基础 | 绪论
- 微信怎么查看微信号
- 如何做英语二新题型
- 总结几种排序算法(二)---选择排序
- matlab中实现RANSAC平面拟合
- Django下mysql数据库的相关操作(创建数据表、以及增删查改)
- 七月算法深度学习 第三期 学习笔记-第十节 深度学习与迁移学习
- 软帝第一次考试错题集锦
- AtCoder Contest 068 Task D 详解
- HEVC函数入门(14)——建议先看:整个编码流程以及相关的函数
- 170730 通信-按键监听和外部中断
- 动态代理,静态代理
- Tensorflow训练mnist数据(完整版)
- cocos2d-x 之输入框,密码框