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获取CPU、内存和硬盘等windowns系统信息的2个例子
Apr 15 Python
python处理文本文件实现生成指定格式文件的方法
Jul 31 Python
Python编写百度贴吧的简单爬虫
Apr 02 Python
Python闭包实现计数器的方法
May 05 Python
Python字典简介以及用法详解
Nov 15 Python
Python 数值区间处理_对interval 库的快速入门详解
Nov 16 Python
python实现微信防撤回神器
Apr 29 Python
java中的控制结构(if,循环)详解
Jun 26 Python
python运用pygame库实现双人弹球小游戏
Nov 25 Python
Python文件操作模拟用户登陆代码实例
Jun 09 Python
django rest framework 自定义返回方式
Jul 12 Python
PyCharm2020.3.2安装超详细教程
Feb 08 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录入页面中动态从数据库中提取数据的实现
2006/10/09 PHP
PHP隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
2011/11/02 PHP
一个完整的PHP类包含的七种语法说明
2015/06/04 PHP
豆瓣网的jquery代码实例
2008/06/15 Javascript
Chrome中模态对话框showModalDialog返回值问题的解决方法
2010/05/25 Javascript
图片onload事件触发问题解决方法
2011/07/31 Javascript
js 操作select和option常用代码整理
2012/12/13 Javascript
基于jquery异步传输json数据格式实例代码
2013/11/23 Javascript
JavaScript获取flash对象与网上的有所不同
2014/04/21 Javascript
JavaScript实现带箭头标识的多级下拉菜单效果
2015/08/27 Javascript
WEB前端开发都应知道的jquery小技巧及jquery三个简写
2015/11/15 Javascript
实例解析jQuery中proxy()函数的用法
2016/05/24 Javascript
浅谈js的url解析函数封装
2016/06/28 Javascript
JS实战篇之收缩菜单表单布局
2016/12/10 Javascript
Vue动态实现评分效果
2017/05/24 Javascript
js通过Date对象实现倒计时动画效果
2017/10/27 Javascript
解决js相同的正则多次调用test()返回的值却不同的问题
2018/10/10 Javascript
python中__call__方法示例分析
2014/10/11 Python
Python实现简单的HttpServer服务器示例
2017/09/25 Python
python实现协同过滤推荐算法完整代码示例
2017/12/15 Python
python读取中文txt文本的方法
2018/04/12 Python
使用Python处理Excel表格的简单方法
2018/06/07 Python
Python 删除连续出现的指定字符的实例
2018/06/29 Python
pandas删除行删除列增加行增加列的实现
2019/07/06 Python
python3中rank函数的用法
2019/11/27 Python
tensorflow mnist 数据加载实现并画图效果
2020/02/05 Python
Python开发之pip安装及使用方法详解
2020/02/21 Python
解决Keras 自定义层时遇到版本的问题
2020/06/16 Python
杭州时比特电子有限公司SQL
2013/08/22 面试题
什么是.net
2015/08/03 面试题
董事长秘书职责
2014/01/31 职场文书
新员工辞职信范文
2015/05/12 职场文书
python 开心网和豆瓣日记爬取的小爬虫
2021/05/29 Python
python用tkinter开发的扫雷游戏
2021/06/01 Python
Django与数据库交互的实现
2021/06/03 Python
关于Spring配置文件加载方式变化引发的异常详解
2022/01/18 Java/Android