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

 更新时间:2017年11月15日 12:03:56   作者:x_smile   我要评论
这篇文章主要给大家介绍了关于Django中ORM表的创建和增删改查等基本操作的方法,还给大家分享了django orm常用查询筛选的相关内容,分享出来供大家参考学习,需要的朋友们下面随着小编来一起学习学习吧。

前言

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;


看到的不仅有两个自定的属性列,多出一个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切片操作实例分析

    这篇文章主要介绍了Python切片操作,结合实例形式较为详细的分析了Python切片相关的正向、反向、步长等使用技巧与相关注意事项,需要的朋友可以参考下
    2018-03-03
  • 通过Python来使用七牛云存储的方法详解

    通过Python来使用七牛云存储的方法详解

    这篇文章主要介绍了通过Python来使用七牛云存储的方法详解,七牛云存储是国内领先的服务器数据备份解决方案商,需要的朋友可以参考下
    2015-08-08
  • python实现字符串中字符分类及个数

    python实现字符串中字符分类及个数

    这篇文章主要介绍了python实现字符串中字符分类及个数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • python获取array中指定元素的示例

    python获取array中指定元素的示例

    今天小编就为大家分享一篇python获取array中指定元素的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • python读取文本中的坐标方法

    python读取文本中的坐标方法

    今天小编就为大家分享一篇python读取文本中的坐标方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • Python数据结构与算法之字典树实现方法示例

    Python数据结构与算法之字典树实现方法示例

    这篇文章主要介绍了Python数据结构与算法之字典树实现方法,可实现针对单词出现次数的功能,涉及Python树结构的定义、遍历及等相关操作技巧,需要的朋友可以参考下
    2017-12-12
  • 浅谈python多线程和队列管理shell程序

    浅谈python多线程和队列管理shell程序

    这篇文章主要给大家简单介绍了python多线程和队列管理shell程序的方法和简单示例,有需要的小伙伴可以参考下。
    2015-08-08
  • python判断、获取一张图片主色调的2个实例

    python判断、获取一张图片主色调的2个实例

    一幅图片,想通过程序判断获得其主要色调,应该怎么样处理?本文通过python实现判断、获取一张图片的主色调方法,需要的朋友可以参考下
    2014-04-04
  • Django实现CAS+OAuth2的方法示例

    Django实现CAS+OAuth2的方法示例

    这篇文章主要介绍了Django实现CAS+OAuth2的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Anaconda 离线安装 python 包的操作方法

    Anaconda 离线安装 python 包的操作方法

    今天小编就为大家分享一篇Anaconda 离线安装 python 包的操作方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-06-06

最新评论