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写的服务监控程序实例
Jan 31 Python
python编程测试电脑开启最大线程数实例代码
Feb 09 Python
浅谈pandas中shift和diff函数关系
Apr 08 Python
numpy实现合并多维矩阵、list的扩展方法
May 08 Python
Python创建普通菜单示例【基于win32ui模块】
May 09 Python
python实现大文件分割与合并
Jul 22 Python
基于Python获取照片的GPS位置信息
Jan 20 Python
windows下的pycharm安装及其设置中文菜单
Apr 23 Python
使用Python将图片转正方形的两种方法实例代码详解
Apr 29 Python
Python Http请求json解析库用法解析
Nov 28 Python
python飞机大战游戏实例讲解
Dec 04 Python
Pandas实现批量拆分与合并Excel的示例代码
May 30 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
星际争霸中的对战模式介绍
2020/03/04 星际争霸
php实现批量压缩图片文件大小的脚本
2014/07/04 PHP
php实现读取超大文件的方法
2014/07/28 PHP
PHP实现的62进制转10进制,10进制转62进制函数示例
2019/06/06 PHP
laravel接管Dingo-api和默认的错误处理方式
2019/10/25 PHP
php和js实现根据子网掩码和ip计算子网功能示例
2019/11/09 PHP
如何将JS的变量值传递给ASP变量
2012/12/10 Javascript
nodejs爬虫抓取数据乱码问题总结
2015/07/03 NodeJs
JavaScript数组对象实现增加一个返回随机元素的方法
2015/07/27 Javascript
Node.js实现兼容IE789的文件上传进度条
2016/09/02 Javascript
bootstrap动态添加面包屑(breadcrumb)及其响应事件的方法
2017/05/25 Javascript
webpack4 处理CSS的方法示例
2018/09/03 Javascript
node.js监听文件变化的实现方法
2019/04/17 Javascript
electron实现静默打印的示例代码
2019/08/12 Javascript
JS回调函数简单易懂的入门实例分析
2019/09/29 Javascript
JQuery获得内容和属性方法解析
2020/05/30 jQuery
使用Vant完成DatetimePicker 日期的选择器操作
2020/11/12 Javascript
Python实现的一个自动售饮料程序代码分享
2014/08/25 Python
python元组操作实例解析
2014/09/23 Python
Python中方法链的使用方法
2016/02/23 Python
Python标准库笔记struct模块的使用
2018/02/22 Python
python利用pandas将excel文件转换为txt文件的方法
2018/10/23 Python
Python告诉你木马程序的键盘记录原理
2019/02/02 Python
python实现Dijkstra算法的最短路径问题
2019/06/21 Python
Django模板Templates使用方法详解
2019/07/19 Python
python3 字符串知识点学习笔记
2020/02/08 Python
Python分析微信好友性别比例和省份城市分布比例的方法示例【基于itchat模块】
2020/05/29 Python
python 三种方法实现对Excel表格的读写
2020/11/19 Python
ProBikeKit新西兰:自行车套件,跑步和铁人三项装备
2017/04/05 全球购物
营销与策划应届生求职信
2013/11/04 职场文书
关于工资低的辞职信
2014/01/14 职场文书
竞选学习委员演讲稿
2014/09/01 职场文书
2015年父亲节寄语
2015/03/23 职场文书
美容院管理规章制度
2015/08/05 职场文书
员工担保书范本
2015/09/22 职场文书
2016党风廉政建设心得体会范文
2016/01/25 职场文书