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/

  • 相关阅读:
    未来的计划和考虑
    jquery 常用的方法
    对于页面动态加载的元素事件无效的解决方案
    Myeclipse8.5中svn插件安装方法总结
    JS读RSS
    JAVA的RSS处理
    环境:win7+ie8 IE8的F12不起作用,原因如下:
    关闭和释放JDBC
    关于Eclipse无法生成class文件的问题
    JavaScript跨域总结与解决办法
  • 原文地址:https://www.cnblogs.com/xsmile/p/7835235.html
Copyright © 2011-2022 走看看