Django中ORM表的创建和增删改查方法示例


Posted in Python onNovember 15, 2017

前言

Django作为重量级的Python web框架,在做项目时肯定少不了与数据库打交道,编程人员对数据库的语法简单的还行,但过多的数据库语句不是编程人员的重点对象。因此用ORM来操作数据库相当快捷。今天来介绍一下用ORM操作数据库。

一、创建Django项目

可以使用pycharme专业版直接快速创建。如果不是专业版也可以使用命令进行创建。下面列出命令行创建方式:

django-admin startproject orm_test

这时会在当前目录创建文件夹名为orm_test,接下来进入orm_test文件夹中,执行命令:

python manage.py runserver

就启动了该项目,默认浏览器访问127.0.0.1:8000就可以看到项目运行成功的提示。

接下来我们用命令在项目中创建一个应用:

django-admin startapp cmdb

此时基本准备就做好了。

二、修改配置文件

把我们的应用即cmdb添加到 setting.py 的 INSTALLED_APPS 中:

INSTALLED_APPS = [
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'cmdb', #我们创建的应用
]

另外我们基本用的是mysql数据库,但django中默认为sqlite3。仍然在setting.py中找到 DATABASES ,对内容进行修改:

DATABASES = {
 'default': {
 'ENGINE': 'django.db.backends.mysql',
 'NAME': 'orm_test', #数据库名称
 'USER':'root', #用户
 'PASSWORD':'123456', #密码
 'HOST':'localhost', #IP地址,本地测试为localhost
 'PORT':'3306', #端口号
 }
}

里面的“NAME”的值是你数据库中已有的数据库名称,接下里在此数据库中创建数据表。

在python3 中,连接数据库的是pymysql,因此在项目同名文件夹下的__init__.py 中加入以下代码才能正常运行。

import pymysql
 pymysql.install_as_MySQLdb()

三、写模板文件来创建表结构

在应用(cmdb)的 models.py 中开始写表结构,我们要做的就是写一个类,类中的属性为表中的列,ORM将类转换为sql语句。简单的写一个下面的类,包含用户名和密码两列。

from django.db import models

# Create your models here.

class users(models.Model):
 username=models.CharField(max_length=32)
 password=models.CharField(max_length=64)

四、生成数据表

在终端中输入命令行 python manage.py makemigrations ,这时会在应用(cmdb)下的migrations文件夹下出现一个_initial.py 的文件,它记录着生成数据表结构的一些数据的临时文件,接着在命令行中输入  python manage.py migrate,由刚才的临时文件生成数据表。我们在数据库中查看生成的数据表,可以看到django生成的不仅仅是刚创建的一个表,而是十多个表,除自己的一张表,剩余为django内部使用(包含有缓存,cookie,session等,毕竟这么厉害的框架为你做到你想不到的是应该的)。在终端中查看一下表结构:show create table cmdb_users;

Django中ORM表的创建和增删改查方法示例

看到的不仅有两个自定的属性列,多出一个id列,并且是自增的还是主键。

五、路由映射关系

在同名项目文件夹下的urls.py 中导入应用(cmdb),写映射关系到cmdb的views.py

from django.conf.urls import url
from django.contrib import admin
from cmdb import views
urlpatterns = [
 url(r'^admin/', admin.site.urls),
 url(r'^login/', views.login),
]

六、视图及数据表的增删改查

在路由映射到应用(cmdb)下的views.py 中,右映射中写对应的函数,也就是login函数。用于显示的观察项目的运行,我们在此函数中就先简单得的打印到屏幕上一句“Hello World”。

在login函数中写入增删改查的语句。

from django.shortcuts import render
from django.shortcuts import HttpResponse
# Create your views here.

from cmdb import models
def login(request):
 #增加
 # models.users.objects.create(username='xsmile',password=12345)
 # models.users.objects.create(username='sofia',password=12345)
 # models.users.objects.create(username='jerry',password=12345)
 #查看
 # result=models.users.objects.all() #查看所有

 # 条件查询,结果为querySet类型,所以循环取出结果
 # result=models.users.objects.filter(username='sofia')
 # for row in result:
 # print(row.id,row.username,row.password)

 #更改
 # models.users.objects.filter(id=2).update(username='eric')
 
 #删除
 #models.users.objects.filter(username='sofia').delete()

 return HttpResponse('Hello World')

启动项目后,浏览器访问127.0.0.1:8000/login 就可看到屏幕上的Hello World,表示相关的数据操作已成功修改数据表。
相关操作后数据表内容的变化如下:

#插入一条数据后
mysql> select * from cmdb_users;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
| 1 | xsmile | 12345 |
+----+----------+----------+
1 row in set (0.00 sec)

#再插入三条数据后
mysql> select * from cmdb_users;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
| 1 | xsmile | 12345 |
| 2 | xsmile | 12345 |
| 3 | sofia | 12345 |
| 4 | jerry | 12345 |
+----+----------+----------+
4 rows in set (0.00 sec)

#修改数据后
mysql> select * from cmdb_users;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
| 1 | xsmile | 12345 |
| 2 | eric | 12345 |
| 3 | sofia | 12345 |
| 4 | jerry | 12345 |
+----+----------+----------+
4 rows in set (0.00 sec)

#删除数据后
mysql> select * from cmdb_users;
+----+----------+----------+
| id | username | password |
+----+----------+----------+
| 1 | xsmile | 12345 |
| 2 | eric | 12345 |
| 4 | jerry | 12345 |
+----+----------+----------+
3 rows in set (0.00 sec)

七、django orm 常用查询筛选

先列举一下django orm中的常用查询的筛选方法:

  • 大于、大于等于
  • 小于、小于等于
  • in
  • like
  • is null / is not null
  • 不等于/不包含于

model:

class User(AbstractBaseUser, PermissionsMixin):
 uuid = ShortUUIDField(unique=True)
 username = models.CharField(max_length=100, db_index=True, unique=True, default='')
 schoolid = models.CharField(max_length=100, null=True, blank=True, default='')
 classid = models.CharField(max_length=100, null=True, blank=True, default='')
 fullname = models.CharField(max_length=50, default='', null=True, blank=True)
 email = models.EmailField(_('email address'), blank=True, null=True)
 age = models.SmallIntegerField(default=0)

大于、大于等于

__gt 大于
__gte 大于等于

User.objects.filter(age__gt=10) // 查询年龄大于10岁的用户
User.objects.filter(age__gte=10) // 查询年龄大于等于10岁的用户

小于、小于等于

__lt 小于
__lte 小于等于

User.objects.filter(age__lt=10)  // 查询年龄小于10岁的用户
User.objects.filter(age__lte=10) // 查询年龄小于等于10岁的用户

in

__in

查询年龄在某一范围的用户
User.objects.filter(age__in=[10, 20, 30])

like

__exact    精确等于 like 'aaa'
__iexact    精确等于 忽略大小写 ilike 'aaa'
__contains   包含 like '%aaa%'
__icontains  包含 忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains。

is null / is not null

__isnull 判空

User.objects.filter(username__isnull=True)  // 查询用户名为空的用户
User.objects.filter(username__isnull=False) // 查询用户名不为空的用户

不等于/不包含于

User.objects.filter().excute(age=10)  // 查询年龄不为10的用户
User.objects.filter().excute(age__in=[10, 20]) // 查询年龄不为在 [10, 20] 的用户

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python cv2 图像自适应灰度直方图均衡化处理方法
Dec 07 Python
django中瀑布流写法实例代码
Oct 14 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
Oct 28 Python
python groupby 函数 as_index详解
Dec 16 Python
python 实现图片上传接口开发 并生成可以访问的图片url
Dec 18 Python
pytorch 实现cross entropy损失函数计算方式
Jan 02 Python
Python3 虚拟开发环境搭建过程(图文详解)
Jan 06 Python
pytorch 使用加载训练好的模型做inference
Feb 20 Python
Matplotlib自定义坐标轴刻度的实现示例
Jun 18 Python
Python Tkinter实例——模拟掷骰子
Oct 24 Python
2021年值得向Python开发者推荐的VS Code扩展插件
Jan 25 Python
Python基础详解之邮件处理
Apr 28 Python
11月编程语言排行榜 Python逆袭C#上升到第4
Nov 15 #Python
Python竟能画这么漂亮的花,帅呆了(代码分享)
Nov 15 #Python
Python中turtle作图示例
Nov 15 #Python
Django原生sql也能使用Paginator分页的示例代码
Nov 15 #Python
使用Python的turtle模块画图的方法
Nov 15 #Python
python绘制铅球的运行轨迹代码分享
Nov 14 #Python
Python实现句子翻译功能
Nov 14 #Python
You might like
php单例模式实现方法分析
2015/03/14 PHP
php按字符无乱码截取中文的方法
2015/03/27 PHP
Laravel如何实现适合Api的异常处理响应格式
2020/06/14 PHP
javascript中日期转换成时间戳的小例子
2013/03/21 Javascript
JSON 数字排序多字段排序介绍
2013/09/18 Javascript
JavaScript的事件绑定(方便不支持js的时候)
2013/10/01 Javascript
自定义jquery模态窗口插件无法在顶层窗口显示问题
2014/05/29 Javascript
javascript检查浏览器是否支持flash的实现代码
2014/08/14 Javascript
深入理解javascript作用域和闭包
2014/09/23 Javascript
JavaScript中string对象
2015/06/12 Javascript
jquery的幻灯片图片切换效果代码分享
2015/09/07 Javascript
jQuery焦点图插件SaySlide
2015/12/21 Javascript
bootstarp modal框居中显示的实现代码
2017/02/18 Javascript
jQuery手风琴的简单制作
2017/05/12 jQuery
jQuery实现radio第一次点击选中第二次点击取消功能
2017/05/15 jQuery
详解webpack babel的配置
2018/01/09 Javascript
解决vue项目打包后提示图片文件路径错误的问题
2018/07/04 Javascript
详解使用Next.js构建服务端渲染应用
2018/07/10 Javascript
图文讲解vue的v-if使用方法
2019/02/11 Javascript
nodejs语言实现验证码生成功能的示例代码
2019/10/13 NodeJs
Django中的CACHE_BACKEND参数和站点级Cache设置
2015/07/23 Python
python中format()函数的简单使用教程
2018/03/14 Python
python logging重复记录日志问题的解决方法
2018/07/12 Python
opencv实现图片模糊和锐化操作
2018/11/19 Python
python实现大文件分割与合并
2019/07/22 Python
django删除表重建的实现方法
2019/08/28 Python
浅谈python多线程和多线程变量共享问题介绍
2020/04/17 Python
Python多分支if语句的使用
2020/09/03 Python
生物制药毕业生自荐信
2013/10/16 职场文书
领导检查欢迎词
2014/01/14 职场文书
活动邀请函范文
2014/01/19 职场文书
放飞中国梦演讲稿
2014/04/23 职场文书
入党个人总结范文
2015/03/02 职场文书
2015年妇联工作总结范文
2015/04/22 职场文书
父亲节感言
2015/08/03 职场文书
Vue+TypeScript中处理computed方式
2022/04/02 Vue.js