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 tensorflow学习之识别单张图片的实现的示例
Feb 09 Python
Sanic框架流式传输操作示例
Jul 18 Python
基于Python的Post请求数据爬取的方法详解
Jun 14 Python
python实现串口自动触发工作的示例
Jul 02 Python
pandas 时间格式转换的实现
Jul 06 Python
python实现while循环打印星星的四种形状
Nov 23 Python
简单了解python字符串前面加r,u的含义
Dec 26 Python
基于python连接oracle导并出数据文件
Apr 28 Python
python删除指定列或多列单个或多个内容实例
Jun 28 Python
Python中使用Selenium环境安装的方法步骤
Feb 22 Python
Python 中random 库的详细使用
Jun 03 Python
python开发飞机大战游戏
Jul 15 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的开发框架的现状和展望
2007/03/16 PHP
追求程序速度,而不是编程的速度
2008/04/23 PHP
新安装的MySQL数据库需要注意的安全知识
2008/07/30 PHP
php下载文件的代码示例
2012/06/29 PHP
PHP cURL初始化和执行方法入门级代码
2015/05/28 PHP
实例讲解PHP设计模式编程中的简单工厂模式
2016/02/29 PHP
CodeIgniter开发实现支付宝接口调用的方法示例
2016/11/14 PHP
php swoft框架实例用法
2020/12/22 PHP
在jquery中处理带有命名空间的XML数据
2011/06/13 Javascript
Javascript 浮点运算的问题分析与解决方法
2013/08/27 Javascript
js计算字符串长度包含的中文是utf8格式
2013/10/15 Javascript
jQuery如何封装输入框插件
2016/08/19 Javascript
js实现随机抽选效果、随机抽选红色球效果
2017/01/13 Javascript
xmlplus组件设计系列之列表(4)
2017/04/26 Javascript
NodeJs的fs读写删除移动监听
2017/04/28 NodeJs
使用AngularJS对表单提交内容进行验证的操作方法
2017/07/12 Javascript
BootStrap数据表格实例代码
2017/09/13 Javascript
详解nodejs通过代理(proxy)发送http请求(request)
2017/09/22 NodeJs
swiper4实现移动端导航切换
2020/10/16 Javascript
Nautil 中使用双向数据绑定的实现
2019/10/02 Javascript
微信小程序点击顶部导航栏切换样式代码实例
2019/11/12 Javascript
如何通过vscode运行调试javascript代码
2020/07/24 Javascript
[14:56]教你分分钟做大人:巫医
2014/10/30 DOTA
[01:00:14]DOTA2官方TI8总决赛纪录片 真视界True Sight
2019/01/16 DOTA
Python实现的简单文件传输服务器和客户端
2015/04/08 Python
使用Python的urllib和urllib2模块制作爬虫的实例教程
2016/01/20 Python
Python中getpass模块无回显输入源码解析
2018/01/11 Python
python 处理telnet返回的More,以及get想要的那个参数方法
2019/02/14 Python
Python流程控制 if else实现解析
2019/09/02 Python
Python 剪绳子的多种思路实现(动态规划和贪心)
2020/02/24 Python
Python读取xlsx数据生成图标代码实例
2020/08/12 Python
使用pandas实现筛选出指定列值所对应的行
2020/12/13 Python
基于 HTML5 WebGL 实现的垃圾分类系统
2019/10/08 HTML / CSS
英国国家美术馆商店:National Gallery
2019/05/01 全球购物
介绍一下如何优化MySql
2016/12/20 面试题
2014年幼儿园工作总结
2014/11/10 职场文书