人生苦短 ~

Tips:仅适用于 Python 3+(反正差别不大,py2 改改也能用)。因为据 Python 之父 Guido van Rossum 说会在 2020 年停止对 Python 2 的官方支持,所以如果你还在使用 Python 2 那就要早做准备了,毕竟没有官方的支持使用起来也不顺心的。

1. 配置 MySQL 数据库

如果你没安装 mysql 驱动,可以执行以下命令安装:

pip install mysqlclient

我们在项目的 settings.py 文件中找到 DATABASES 配置项,将其信息修改为:

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 或者使用 mysql.connector.django
'NAME': 'mydjango', # 数据库名称
'USER': 'root', # 用户名
'PASSWORD': '', # 密码
'HOST':'localhost', # 地址
'PORT':'', # 端口
}
}

2. 配置模型 Models

Django 规定,如果要使用模型,必须要创建一个 app。但我们这次就不在新创建了,使用之前创建的 app mydjango

我们修改模型 mydjango/models.py 文件,修改内容如下:

from django.db import models

class TUser(models.Model):
name = models.CharField(max_length=20)
age = models.IntegerField()

这里如果不自定义主键,django 将会自动帮我们创建 id 主键。

表名组成结构为:应用名_类名(如:mydjango_tuser)。

以上的类名代表了数据库表名,且继承了 models.Model,类里面的字段代表数据表中的字段(name),数据类型则由 CharField(相当于 varchar)、DateField(相当于 datetime)、IntegerField(相当于 int), max_length 参数限定长度。

想查看详细的数据类型信息请移步 #Django models 常用数据类型

3. 创建表结构

配置完以上步骤后执行以下命令创建表结构:

python manage.py migrate   # 创建表结构
python manage.py makemigrations mydjango # 让 Django 知道我们在我们的模型有一些变更
python manage.py migrate mydjango # 创建表结构

创建成功后的输出内容,对应的表结构,以及模型表字段

4. 数据库操作

在我们的 App mydjango 模型中创建一个文件 dbtest.py,用于数据库的增删改查操作。

打开文件 \mydjango\urls.py,修改为如下内容:

from django.urls import path
from mydjango import views, dbtest urlpatterns = [
path('hello/', views.hello),
path('index/', views.index),
path('db/addUser/', dbtest.addUser),
path('db/getUserAll/', dbtest.getUserAll),
path('db/updateUser/', dbtest.updateUser),
path('db/delUser/', dbtest.delUser),
]

打开文件 dbtest.py

增加数据。需要先创建对象,然后再执行 save 函数,相当于 SQL 中的 INSERT:

from django.http import HttpResponse

from mydjango.models import TUser

# 数据库操作,增加用户
def addUser(request):
try:
tUser = TUser(name='cq', age=19)
tUser.save()
return HttpResponse("<p>数据添加成功!</p>")
except:
return HttpResponse("<p>数据添加失败</p>")

打开地址 http://127.0.0.1:8000/mydjango/db/addUser/,不出意外就和我一样添加成功:

查询数据。Django 提供了多种方式来获取数据库的内容。

# 获取所有用户数据
def getUserAll(request):
response = ""
try:
# 通过 objects 这个模型管理器的 all() 获得所有数据行,相当于 SQL 中的 SELECT * FROM
list = TUser.objects.all()
# 输出所有数据
for var in list:
response += "id = " + str(var.id) + ",name = " + var.name + ",age = " + str(var.age) + "<br />"
return HttpResponse("<p>" + response + "</p>")
except:
return HttpResponse("<p>查询数据失败</p>")

以上代码是查询全部的数据, str(var.id) 和 str(var.age) 表示的是把 int 类型数据转为 string 类型,因为 HttpResponse 只能返回 string 类型,不然会抛异常。

其他查询方式:

# filter 相当于 SQL 中的 WHERE,可设置条件过滤结果
response = TUser.objects.filter(id=1) # 获取单个对象
response = TUser.objects.get(id=1)

更新数据。修改数据可以使用 save()  或 update():

# 更新用户数据
def updateUser(request):
try:
# 修改其中一个 id=1 的 name 字段,再 save,相当于 SQL 中的 UPDATE
tUser = TUser.objects.get(id=1)
tUser.age = 21
tUser.save()
return HttpResponse("<p>数据修改成功!</p>")
except:
return HttpResponse("<p>数据修改失败</p>")

其他更新方式:

# 另外一种方式,update 方法
TUser.objects.filter(id=1).update(age=) # 修改所有的列
TUser.objects.all().update(age=)

删除数据。删除数据库中的对象只需调用该对象的 delete() 方法即可:

# 删除用户数据
def delUser(request):
try:
# 删除 id=1 的数据
tUser = TUser.objects.get(id=1)
tUser.delete()
return HttpResponse("<p>数据删除成功!</p>")
except:
return HttpResponse("<p>数据删除失败</p>")

其他删除方式:

# 另外一种方式
TUser.objects.filter(id=1).delete() # 删除所有数据
TUser.objects.all().delete()

5. 激活管理界面

首先确认你的 HelloDjango/urls.py 文件是否有如下配置:

urlpatterns = [
url('admin/', admin.site.urls),
]

如果有的话打开服务器输入网址  则会在浏览器中出现如下界面:

由于我们数据库是没有配置登录帐号的,所以不能进行登录,需要通过 python manage.py createsuperuser 来创建一个超级用户:

最开始创建失败的原因是由于密码太短,至少需要八位字符;全是数字;该密码太常见了,所以这是需要注意的地方。

然后我们就可以使用该帐号登录系统:

打开我们的 App 模块中的 mydjango/admin.py 文件,把我们的 Models 添加进我们的 admin 管理页面:

from django.contrib import admin
from mydjango.models import TUser # Register your models here.
admin.site.register(TUser)

然后我们就可以在后台进行我们的模块管理了。

~ 我学 Python

Django 学习笔记(四) --- 模型和数据库的更多相关文章

  1. Django 学习笔记(七)数据库基本操作(增查改删)

    一.前期准备工作,创建数据库以及数据表,详情点击<Django 学习笔记(六)MySQL配置> 1.创建一个项目 2.创建一个应用 3.更改settings.py 4.更改models.p ...

  2. Django 学习笔记之模型高级用法

    目录 1 复杂的字段类型 1.1 整数类型的区别 1.2 自增类型的区别 1.3 时间类型 1.4 FilePathField 1.5 FileField 1.6 ImageField 2 关系字段 ...

  3. Django学习笔记009-django models进行数据库增删查改

    引入models的定义 from app.models import  myclass class  myclass(): aa =  models. CharField (max_length=No ...

  4. Django学习笔记二

    Django学习笔记二 模型类,字段,选项,查询,关联,聚合函数,管理器, 一 字段属性和选项 1.1 模型类属性命名限制 1)不能是python的保留关键字. 2)不允许使用连续的下划线,这是由dj ...

  5. Django 学习笔记(六)MySQL配置

    环境:Ubuntu16.4 工具:Python3.5 一.安装MySQL数据库 终端命令: sudo apt-get install mysql-server sudo apt-get install ...

  6. Django学习笔记(16)——扩展Django自带User模型,实现用户注册与登录

    一,项目题目:扩展Django自带User模型,实现用户注册与登录 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册,登录,用户认证,注销,修改密码等功能. ...

  7. Django:学习笔记(7)——模型进阶

    Django:学习笔记(7)——模型进阶 模型的继承 我们在面向对象的编程中,一个很重要的的版块,就是类的继承.父类保存了所有子类共有的内容,子类通过继承它来减少冗余代码并进行灵活扩展. 在Djang ...

  8. Django:学习笔记(6)——模型

    Django:学习笔记(6)——模型 快速上手 模型到底是什么呢?我们可以想,如果一张数据表的各个字段可以自动映射到一个类的各个属性,则每条记录对应这个类的一个对象.那我们通过类方法来操作对象(即表记 ...

  9. Django 学习笔记之三 数据库输入数据

    假设建立了django_blog项目,建立blog的app ,在models.py里面增加了Blog类,同步数据库,并且建立了对应的表.具体的参照Django 学习笔记之二的相关命令. 那么这篇主要介 ...

  10. Django 学习笔记(四)模板变量

    关于Django模板变量官方网址:https://docs.djangoproject.com/en/1.11/ref/templates/builtins/ 1.传入普通变量 在hello/Hell ...

随机推荐

  1. python基础之Day11

    一.函数是对象 函数是第一类对象的含义是函数可以被当作数据处理 二.函数的嵌套定义 def f1(): def f2(): print('from f2') f2()f1() 三.名称空间与作用域 1 ...

  2. jQuery对象和DOM对象相互转换

    DOM对象转为DOM对象: obj = document.getElementById('id') 使用$()包括对象即可 $(obj) jQuery对象转为DOM对象: 在对象后面添加[0] $(' ...

  3. list(zip(*querySet))使用

    teacher_cls_list = obj.cls.all().values_list('id', 'caption') #list(zip(*list)),将数组中的元组中的每一项取出,添加到一起 ...

  4. Memcache cpu占用过高

    分析应该是memcache的内存大小还是默认配置,已经满足不了当前的大数据量的需要了,大量的新缓存需要进入,同时大量的旧缓存又需要被淘汰出来,一进一出导致CPU占用过多.进入注册表,找到:HKEY_L ...

  5. vue-学习系列之vue双向绑定原理

    一.访问器属性 访问器属性是对象中的一种特殊属性,它不能直接在对象中设置,而必须通过 defineProperty() 方法单独定义. var obj = { }; // 为obj定义一个名为 hel ...

  6. [Solution] JZOJ3470 最短路

    [Solution] JZOJ3470 最短路 题面 Description 给定一个n个点m条边的有向图,有k个标记点,要求从规定的起点按任意顺序经过所有标记点到达规定的终点,问最短的距离是多少. ...

  7. SWPU-ACM集训队周赛之组队赛(3-11) C题题解

    点这里去看题 模拟,注意细节 #include<stdio.h> #include<string.h> int main() { ]; //q[]储存正负信息 scanf(&q ...

  8. poj3281构图题

    题目大意:有F种食物,D种饮料N头奶牛,只能吃某种食物和饮料(而且只能吃特定的一份)一种食物被一头牛吃了之后,其余牛就不能吃了第一行有N,F,D三个整数接着2-N+1行代表第i头牛,前面两个整数是Fi ...

  9. JavaScript实现多张图片上传功能

    今天闲着没事,把之前的多张图片上传代码整理了下. 页面主要代码: <div class="upBox upBox2"> <div class="d1&q ...

  10. Mybatis框架一:搭建测试

    Mybatis框架不再介绍: 在JDBC中存在一些问题: 1.频繁连接和释放资源浪费内存 2.编码完成后不便于维护 于是产生了简化数据库操作的框架:Hibernate.Mybatis等等,这里介绍My ...