Django 框架模型操作入门教程


Posted in Python onNovember 05, 2019

本文实例讲述了Django 框架模型操作。分享给大家供大家参考,具体如下:

Django 对各种数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。

Django 为这些数据库提供了统一的调用API。 我们可以根据自己业务需求选择不同的数据库。

MySQL 是 Web 应用中最常用的数据库。本章以mysql为例。

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

sudo pip3 install mysqlclient

数据库配置

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

djangoPro/djangoPro/settings.py: 文件代码:

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 或者使用 mysql.connector.django
'NAME': 'test', #使用的数据库
'USER': 'test', #用户名
'PASSWORD': 'test123',   #密码 没有可以为空
'HOST':'localhost', 
'PORT':'3306',
}
}

这里添加了中文注释,所以需要在 HelloWorld/settings.py 文件头部添加 # -*- coding: UTF-8 -*-。

上面包含数据库名称和用户的信息,它们与 MySQL 中对应数据库和用户的设置相同。Django 根据这一设置,与 MySQL 中相应的数据库和用户连接起来。

定义模型

创建 APP

Django规定,如果要使用模型,必须要创建一个app。我们使用以下命令创建一个 TestModel 的 app:

django-admin startapp TestModel

目录结构如下:

djangoPro
|-- TestModel
|   |-- __init__.py
|   |-- admin.py
|   |-- models.py
|   |-- tests.py
|   `-- views.py

修改 TestModel/models.py 文件,代码如下:

# models.py
from django.db import models
class Test(models.Model):
  name = models.CharField(max_length=20)

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

接下来在settings.py中找到INSTALLED_APPS这一项,如下:

INSTALLED_APPS = (
  'django.contrib.admin',
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.messages',
  'django.contrib.staticfiles',
  'TestModel',        # 添加此项
)

在命令行中运行:

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

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

注意:尽管我们没有在models给表设置主键,但是Django会自动添加一个id作为主键。

数据库操作

接下来我们在 HelloWorld 目录中添加 testdb.py 文件(下面介绍),并修改 urls.py:

from django.conf.urls import *
from . import view,testdb
urlpatterns = [
url(r'^hello$', view.hello),
url(r'^testdb$', testdb.testdb),
]

添加数据

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

# -*- coding: utf-8 -*-
from django.http import HttpResponse
from TestModel.models import Test
# 数据库操作
def testdb(request):
test1 = Test(name='runoob')

test1.save()

return HttpResponse("<p>数据添加成功!</p>")

获取数据

Django提供了多种方式来获取数据库的内容,如下代码所示:

djangopro/djangoPro/testdb.py: 文件代码:

# -*- coding: utf-8 -*-
from django.http import HttpResponse
from TestModel.models import Test
# 数据库操作
def testdb(request):
# 初始化
response = ""
response1 = ""
# 通过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="runoob").order_by("id")
# 输出所有数据
for var in list:
response1 += var.name + " "
response = response1
return HttpResponse("<p>" + response + "</p>")

更新数据

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

djangopro/djangoPro/testdb.py: 文件代码:

# -*- coding: utf-8 -*-
from django.http import HttpResponse
from TestModel.models import Test
# 数据库操作
def testdb(request):
# 修改其中一个id=1的name字段,再save,相当于SQL中的UPDATE
test1 = Test.objects.get(id=1)
test1.name = 'Google'
test1.save()
# 另外一种方式
#Test.objects.filter(id=1).update(name='Google')
# 修改所有的列
# Test.objects.all().update(name='Google')
return HttpResponse("<p>修改成功</p>")

删除数据

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

djangopro/djangoPro/testdb.py: 文件代码:

# -*- coding: utf-8 -*-
from django.http import HttpResponse
from TestModel.models import Test
# 数据库操作
def testdb(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>")

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

Python 相关文章推荐
Python 执行字符串表达式函数(eval exec execfile)
Aug 11 Python
python time模块用法实例详解
Sep 11 Python
在Django的URLconf中进行函数导入的方法
Jul 18 Python
将Django框架和遗留的Web应用集成的方法
Jul 24 Python
详解Python 数据库的Connection、Cursor两大对象
Jun 25 Python
django用户登录和注销的实现方法
Jul 16 Python
Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】
Sep 04 Python
python获取本机所有IP地址的方法
Dec 26 Python
Django框架ORM数据库操作实例详解
Nov 07 Python
浅谈Python访问MySQL的正确姿势
Jan 07 Python
python 实现在shell窗口中编写print不向屏幕输出
Feb 19 Python
Python 抓取数据存储到Redis中的操作
Jul 16 Python
Python3.7 读取 mp3 音频文件生成波形图效果
Nov 05 #Python
python被修饰的函数消失问题解决(基于wraps函数)
Nov 04 #Python
Python imread、newaxis用法详解
Nov 04 #Python
Python使用微信接入图灵机器人过程解析
Nov 04 #Python
python selenium循环登陆网站的实现
Nov 04 #Python
Django项目中使用JWT的实现代码
Nov 04 #Python
Python collections中的双向队列deque简单介绍详解
Nov 04 #Python
You might like
PHP的FTP学习(一)[转自奥索]
2006/10/09 PHP
php利用单例模式实现日志处理类库
2014/02/10 PHP
php常用表单验证类用法实例
2015/06/18 PHP
Thinkphp 中 distinct 的用法解析
2016/12/14 PHP
php获取'/'传参的值简单方法
2017/07/13 PHP
PHP代码重构方法漫谈
2018/04/17 PHP
Prototype 学习 工具函数学习($方法)
2009/07/12 Javascript
jquery tools之tooltip
2009/07/25 Javascript
网页上的Javascript编辑器和代码格式化
2010/04/25 Javascript
Javascript中call和apply函数的比较和使用实例
2015/02/03 Javascript
js实现支持手机滑动切换的轮播图片效果实例
2015/04/29 Javascript
JS基于FileSystemObject创建一个指定路径的TXT文本文件
2015/08/05 Javascript
浅析javascript的return语句
2015/12/15 Javascript
jquery实现input框获取焦点的简单实例
2017/01/26 Javascript
6行代码实现微信小程序页面返回顶部效果
2018/12/28 Javascript
VScode格式化ESlint方法(最全最好用方法)
2019/09/10 Javascript
详解为element-ui的Select和Cascader添加弹层底部操作按钮
2020/02/07 Javascript
JS判断数组是否包含某元素实现方法汇总
2020/06/24 Javascript
[08:53]DOTA2每周TOP10 精彩击杀集锦vol.9
2014/06/26 DOTA
python发布模块的步骤分享
2014/02/21 Python
编写简单的Python程序来判断文本的语种
2015/04/07 Python
神经网络理论基础及Python实现详解
2017/12/15 Python
Python3使用正则表达式爬取内涵段子示例
2018/04/22 Python
Tensorflow训练模型越来越慢的2种解决方案
2020/02/07 Python
Keras load_model 导入错误的解决方式
2020/06/09 Python
Docker如何部署Python项目的实现详解
2020/10/26 Python
HTML5之SVG 2D入门13—svg对决canvas及长处和适用场景分析
2013/01/30 HTML / CSS
html5使用canvas画空心圆与实心圆
2014/12/15 HTML / CSS
职工运动会邀请函
2014/01/19 职场文书
优秀教师获奖感言
2014/01/31 职场文书
大气污染防治方案
2014/05/19 职场文书
golang 实现两个结构体复制字段
2021/04/28 Golang
中国十大神话动漫电影排行榜 哪吒登顶 白蛇缘起排第七
2022/03/21 国漫
Grafana可视化监控系统结合SpringBoot使用
2022/04/19 Redis
Mysql 一主多从的部署
2022/05/20 MySQL
Win10本地连接不见了怎么恢复? win10系统电脑本地连接不见了解决方法
2023/01/09 数码科技