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 四种数值类型(int,long,float,complex)
Jun 08 Python
Python实现的FTP通信客户端与服务器端功能示例
Mar 28 Python
Python实现的计算器功能示例
Apr 26 Python
tensorflow实现简单的卷积神经网络
May 24 Python
python清除函数占用的内存方法
Jun 25 Python
Python基于百度云文字识别API
Dec 13 Python
Django 缓存配置Redis使用详解
Jul 23 Python
Pytorch修改ResNet模型全连接层进行直接训练实例
Sep 10 Python
django框架创建应用操作示例
Sep 26 Python
浅谈keras中Dropout在预测过程中是否仍要起作用
Jul 09 Python
Python持续监听文件变化代码实例
Jul 22 Python
python如何读取和存储dict()与.json格式文件
Jun 25 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在特殊字符前加斜杠的实现代码
2011/07/17 PHP
TMDPHP 模板引擎使用教程
2012/03/13 PHP
PHP常用函数和常见疑难问题解答
2014/03/05 PHP
基于php的CMS中展示文章类实例分析
2015/06/18 PHP
PHP中的数组处理函数实例总结
2016/01/09 PHP
PHP Echo字符串的连接格式
2016/03/07 PHP
修改Laravel5.3中的路由文件与路径
2016/08/10 PHP
PHP数据分析引擎计算余弦相似度算法示例
2017/08/08 PHP
Laravel框架FormRequest中重写错误处理的方法
2019/02/18 PHP
基于JQuery的访问WebService的代码(可访问Java[Xfire])
2010/11/19 Javascript
jQuery对象数据缓存Cache原理及jQuery.data方法区别介绍
2013/04/07 Javascript
Jquery加载时从后台读取数据绑定到dropdownList实例
2013/06/09 Javascript
jQuery判断div随滚动条滚动到一定位置后停止
2014/04/02 Javascript
微信小程序 数据遍历的实现
2017/04/05 Javascript
JS选取DOM元素常见操作方法实例分析
2018/12/10 Javascript
JavaScript内置对象之Array的使用小结
2020/05/12 Javascript
JQuery基于FormData异步提交数据文件
2020/09/01 jQuery
用Python编程实现语音控制电脑
2014/04/01 Python
python实现批量监控网站
2016/09/09 Python
python+selenium实现京东自动登录及秒杀功能
2017/11/18 Python
对python判断ip是否可达的实例详解
2019/01/31 Python
python 协程 gevent原理与用法分析
2019/11/22 Python
新手学python应该下哪个版本
2020/06/11 Python
在pytorch中动态调整优化器的学习率方式
2020/06/24 Python
详解Python yaml模块
2020/09/23 Python
Django项目创建及管理实现流程详解
2020/10/13 Python
印度和世界各地的精美产品:Ikka Dukka
2018/02/12 全球购物
英国独特礼物想法和个性化礼物网站:notonthehighstreet.com
2018/04/16 全球购物
ABOUT YOU匈牙利:500个最受欢迎的时尚品牌
2019/07/19 全球购物
大学生优秀的自我评价分享
2013/10/22 职场文书
办公室前台岗位职责
2014/01/04 职场文书
学雷锋演讲稿
2014/03/04 职场文书
优秀的2014年两会精神解读
2014/03/17 职场文书
品质标语大全
2014/06/21 职场文书
黄河绝恋观后感
2015/06/08 职场文书
关于PostgreSQL JSONB的匹配和交集问题
2021/09/14 PostgreSQL