zoukankan      html  css  js  c++  java
  • Django中ORM表的创建以及基本增删改查

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

    1. 创建Django项目
      可以使用pycharme专业版直接快速创建。如果不是专业版也可以使用命令进行创建。下面列出命令行创建方式:
      django-admin startproject orm_test
      这时会在当前目录创建文件夹名为orm_test,接下来进入orm_test文件夹中,执行命令:
      python manage.py runserver
      就启动了该项目,默认浏览器访问127.0.0.1:8000就可以看到项目运行成功的提示。
      接下来我们用命令在项目中创建一个应用:
      django-admin startapp cmdb
      此时基本准备就做好了。
    2. 修改配置文件
      把我们的应用即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 ]
      View Code
      另外我们基本用的是mysql数据库,但django中默认为sqlite3。仍然在setting.py中找到 DATABASES ,对内容进行修改:
       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 }
      View Code

      里面的“NAME”的值是你数据库中已有的数据库名称,接下里在此数据库中创建数据表。
      在python3 中,连接数据库的是pymysql,因此在项目同名文件夹下的__init__.py 中加入以下代码才能正常运行。

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


      看到的不仅有两个自定的属性列,多出一个id列,并且是自增的还是主键。
    5. 路由映射关系
      在同名项目文件夹下的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 ]
      View Code
    6. 视图及数据表的增删改查
      在路由映射到应用(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')
      View Code

      启动项目后,浏览器访问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/

  • 相关阅读:
    UVA 11488 Hyper Prefix Sets (字典树)
    UVALive 3295 Counting Triangles
    POJ 2752 Seek the Name, Seek the Fame (KMP)
    UVA 11584 Partitioning by Palindromes (字符串区间dp)
    UVA 11100 The Trip, 2007 (贪心)
    JXNU暑期选拔赛
    计蒜客---N的-2进制表示
    计蒜客---线段的总长
    计蒜客---最大质因数
    JustOj 2009: P1016 (dp)
  • 原文地址:https://www.cnblogs.com/xsmile/p/7835235.html
Copyright © 2011-2022 走看看