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 中:
1 INSTALLED_APPS = [ 2 'django.contrib.admin', 3 'django.contrib.auth', 4 'django.contrib.contenttypes', 5 'django.contrib.sessions', 6 'django.contrib.messages', 7 'django.contrib.staticfiles', 8 'cmdb', #我们创建的应用 9 ]
1 DATABASES = { 2 'default': { 3 'ENGINE': 'django.db.backends.mysql', 4 'NAME': 'orm_test', #数据库名称 5 'USER':'root', #用户 6 'PASSWORD':'123456', #密码 7 'HOST':'localhost', #IP地址,本地测试为localhost 8 'PORT':'3306', #端口号 9 } 10 }
里面的“NAME”的值是你数据库中已有的数据库名称,接下里在此数据库中创建数据表。
在python3 中,连接数据库的是pymysql,因此在项目同名文件夹下的__init__.py 中加入以下代码才能正常运行。1 import pymysql 2 pymysql.install_as_MySQLdb()
- 写模板文件来创建表结构
在应用(cmdb)的 models.py 中开始写表结构,我们要做的就是写一个类,类中的属性为表中的列,ORM将类转换为sql语句。简单的写一个下面的类,包含用户名和密码两列。
1 from django.db import models 2 3 # Create your models here. 4 5 class users(models.Model): 6 username=models.CharField(max_length=32) 7 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
1 from django.conf.urls import url 2 from django.contrib import admin 3 from cmdb import views 4 urlpatterns = [ 5 url(r'^admin/', admin.site.urls), 6 url(r'^login/', views.login), 7 ]
- 视图及数据表的增删改查
在路由映射到应用(cmdb)下的views.py 中,右映射中写对应的函数,也就是login函数。用于显示的观察项目的运行,我们在此函数中就先简单得的打印到屏幕上一句“Hello World”。
在login函数中写入增删改查的语句。
1 from django.shortcuts import render 2 from django.shortcuts import HttpResponse 3 # Create your views here. 4 5 from cmdb import models 6 def login(request): 7 #增加 8 # models.users.objects.create(username='xsmile',password=12345) 9 # models.users.objects.create(username='sofia',password=12345) 10 # models.users.objects.create(username='jerry',password=12345) 11 #查看 12 # result=models.users.objects.all() #查看所有 13 14 # 条件查询,结果为querySet类型,所以循环取出结果 15 # result=models.users.objects.filter(username='sofia') 16 # for row in result: 17 # print(row.id,row.username,row.password) 18 19 #更改 20 # models.users.objects.filter(id=2).update(username='eric') 21 22 #删除 23 #models.users.objects.filter(username='sofia').delete() 24 25 return HttpResponse('Hello World')
启动项目后,浏览器访问127.0.0.1:8000/login 就可看到屏幕上的Hello World,表示相关的数据操作已成功修改数据表。
相关操作后数据表内容的变化如下:1 #插入一条数据后 2 mysql> select * from cmdb_users; 3 +----+----------+----------+ 4 | id | username | password | 5 +----+----------+----------+ 6 | 1 | xsmile | 12345 | 7 +----+----------+----------+ 8 1 row in set (0.00 sec) 9 10 #再插入三条数据后 11 mysql> select * from cmdb_users; 12 +----+----------+----------+ 13 | id | username | password | 14 +----+----------+----------+ 15 | 1 | xsmile | 12345 | 16 | 2 | xsmile | 12345 | 17 | 3 | sofia | 12345 | 18 | 4 | jerry | 12345 | 19 +----+----------+----------+ 20 4 rows in set (0.00 sec) 21 22 #修改数据后 23 mysql> select * from cmdb_users; 24 +----+----------+----------+ 25 | id | username | password | 26 +----+----------+----------+ 27 | 1 | xsmile | 12345 | 28 | 2 | eric | 12345 | 29 | 3 | sofia | 12345 | 30 | 4 | jerry | 12345 | 31 +----+----------+----------+ 32 4 rows in set (0.00 sec) 33 34 #删除数据后 35 mysql> select * from cmdb_users; 36 +----+----------+----------+ 37 | id | username | password | 38 +----+----------+----------+ 39 | 1 | xsmile | 12345 | 40 | 2 | eric | 12345 | 41 | 4 | jerry | 12345 | 42 +----+----------+----------+ 43 3 rows in set (0.00 sec)
原创不易,尊重版权。转载请注明出处:http://www.cnblogs.com/xsmile/
----------------------------------------声明----------------------------------------
----------------------------------------end----------------------------------------