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中urllib2模块的8个使用细节分享
Jan 01 Python
在Python程序中实现分布式进程的教程
Apr 28 Python
Python数据类型详解(四)字典:dict
May 12 Python
python爬取网易云音乐评论
Nov 16 Python
python中字典按键或键值排序的实现代码
Aug 27 Python
python判断无向图环是否存在的示例
Nov 22 Python
Python OpenCV读取显示视频的方法示例
Feb 20 Python
Python统计文本词汇出现次数的实例代码
Feb 27 Python
在Matplotlib图中插入LaTex公式实例
Apr 17 Python
python使用ctypes库调用DLL动态链接库
Oct 22 Python
在Ubuntu中安装并配置Pycharm教程的实现方法
Jan 06 Python
Python3利用openpyxl读写Excel文件的方法实例
Feb 03 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
关于文本留言本的分页代码
2006/10/09 PHP
php安全之直接用$获取值而不$_GET 字符转义
2012/06/03 PHP
PHP移动文件指针ftell()、fseek()、rewind()函数总结
2014/11/18 PHP
PHP中使用Imagick操作PSD文件实例
2015/01/26 PHP
php使用for语句输出三角形的方法
2015/06/09 PHP
Symfony2创建页面实例详解
2016/03/18 PHP
jquery中获得$.ajax()事件返回的值并添加事件的方法
2010/04/15 Javascript
跟我学Nodejs(一)--- Node.js简介及安装开发环境
2014/05/20 NodeJs
node.js中的console.trace方法使用说明
2014/12/09 Javascript
JavaScript的函数式编程基础指南
2016/03/19 Javascript
javascript事件委托的用法及其好处简析
2016/04/04 Javascript
JavaScript用二分法查找数据的实例代码
2017/06/17 Javascript
nodejs动态创建二维码的方法
2017/08/12 NodeJs
nodejs 图解express+supervisor+ejs的用法(推荐)
2017/09/08 NodeJs
从理论角度讨论JavaScript闭包
2019/04/03 Javascript
Node.js中Koa2在控制台输出请求日志的方法示例
2019/05/02 Javascript
vue style width a href动态拼接问题的解决
2020/08/07 Javascript
微信小程序实现可长按移动控件
2020/11/01 Javascript
Python3 Tkinter选择路径功能的实现方法
2019/06/14 Python
python网络编程:socketserver的基本使用方法实例分析
2020/04/09 Python
python进行OpenCV实战之画图(直线、矩形、圆形)
2020/08/27 Python
Python collections模块的使用方法
2020/10/09 Python
CSS3 translate导致字体模糊的实例代码
2019/08/30 HTML / CSS
iHerb香港:维生素、补充剂和天然保健品
2017/08/01 全球购物
香港通票:Hong Kong Pass
2019/02/26 全球购物
Linux常见面试题
2016/10/04 面试题
揭牌仪式主持词
2014/03/19 职场文书
社区志愿者培训方案
2014/06/10 职场文书
我为党旗添光彩演讲稿
2014/09/13 职场文书
2014年图书管理员工作总结
2014/12/01 职场文书
2015年推广普通话演讲稿
2015/03/20 职场文书
大学学生会辞职信
2015/05/13 职场文书
各类场合主持词开场白范文集锦
2019/08/16 职场文书
python实现的人脸识别打卡系统
2021/05/08 Python
Win11 S Mode版本泄露 正式上线后叫做Windows 11 SE
2021/11/21 数码科技
使用refresh_token实现无感刷新页面
2022/04/26 Javascript