zoukankan      html  css  js  c++  java
  • 2.3、django项目对数据库的操作

    在讲django项目对数据库操作之前先看看MyOSS/MyOSS的几个文件吧。

    /MyOSS

    …__init__py #在python里,不管是class,还是django里的project和app都一个这个的文件,表示初始化该类或者模块

    …settings.py #Django项目主要的配置文件,比如数据库引擎,数据库配置,语言,字符编码,支持的调试模式,时区,已经加载的模块,静态文件目录,根目录的URL配置等等。。

    …models.py #Django项目数据库映射文件。

    …urls.py #Django网页路径配置文件。

    …wsgi.py #运行测试web环境,实际生产环境可改成nginx或者apache

    2.3.1、文件代码参考:

    Settings.py

    需要成功安装MySQLdb

     

    Models.py

    测试用的是OSS_SanMao.oss_daka_stat表,数据模型可根据原有表修改或者自动生成。

     

    Urls.py

     

    Views.py

     

    2.3.2、ORM(对象关系映射)

    2.3.2.1、Django里也直接可以使用原生的SQL语句:

    如:for p in usermember.objects.raw(‘select * from user_member’):

                       Print(p)

    打印出来的是user_member中所有用户的信息。

    简单的说,把要执行的SQL放在raw()里就可以了。

    更详细的请参考:https://docs.djangoproject.com/en/1.5/topics/db/sql/

    2.3.2.2、为什么使用ORM

    Django和其他大多数web框架一样,依赖于数据访问层,可以将底层的关系数据库(如MySQL)和Python的面向对象特质联系起来。有以下优点:

    ü  封装有用的方法:

    Django的模型对象是定义一组变量,而变量通常是对应的是数据库的列。你可以定义只读的变量或属性组合;ORM允许重写内置的数据库修改方法,例如保存和删除对象,就可以在数据被保存到数据库之前轻易地对它进行任何操作。

    ü  安全性:

    如2.3.2.1,使用原始SQL语句进行查询,可能会产生不合格的或是保护性很差的查询字符串所导致的问题,例如SQL注入等;但是使用ORM后就不需要自己执行SQL查询,只需要使用ORM提供的智能化引入和转义输入变量的核心机制。

    2.3.2.3、使用ORM

    比如定义了一个module.py

    class book(models.Model):

        blog = models.ForeignKey(Blog)

        headline = models.CharField(max_length=255)

        body_text = models.TextField()

        pub_date = models.DateField()   

        authors = models.ManyToManyField(Author)

        n_comments = models.IntegerField()    

        rating = models.IntegerField()

        def __unicode__(self):

            return self.headline

    下面简单介绍几个ORM对比SQL的例子

    ü  select:

    查找表book中所有数据

    book.objects.all()等价于

    SELECT * FROM book;

    查找book表中所有数据并按authors排序

    book.objects.order_by(‘authors’)等价于

    SELECT * FROM book ORDER BY ‘authors’;

    查找book表中pub_date=’2013-06-08’的所有数据

    book.objects.filter(pub_date=’2013-06-08’)等价于

    SELECT * FROM book WHERE pub_date=’2013-06-08’

    查找book表中作者名字包含‘test’的所有数据

    Book.objects.get(authors_ _contains=’test’)

    SELECT * FROM book WHERE authors LIKE ‘test’

    All:返回一个包含模式里所有数据库记录

    Filter:返回一个包含符合指定条件的模型记录

    Exclude:和filter相反

    Get:获取单个符合条件的记录

    更多请参考文档:https://docs.djangoproject.com/en/1.5/topics/db/queries/

  • 相关阅读:
    3 聊天室
    freemaker分页模板
    [三]ajax重要属性
    [二]java运行原理
    [转]freemaker格式化日期
    [二]SpringMvc实践-注解
    win7下禁用ctrl alt del +上下左右键
    [一]初识SpringMVC
    Powerdesigner设置name与code不同时变化
    Ubuntu下缓冲器溢出攻击实验(可以看看问题分析)
  • 原文地址:https://www.cnblogs.com/fremcode/p/3842164.html
Copyright © 2011-2022 走看看