zoukankan      html  css  js  c++  java
  • Django-orm操作的基础认识

    ORM简介

    在使用Django 框架开发web应用的过程中,不可避免的会涉及到数据的管理操作,如增删改查,使用的数据库管理软件有mysql.oracle,Microsoft SQL Server等.

    编写sql语句的时候,直接编写原生sql语句会存在几个方面的问题,严重的影响了开发效率,

    '''
    1. sql语句执行效率低,程序员需要耗费精力去优化sql语句
    2.数据库迁移:针对mysql开发的sql语句没法直接应用到oracle数据库上,只要需要迁移数据库,就要考虑平台问题
    
    '''
    

    所以为了解决这两个问题,Django引入了ORM概念(Object Relational Mapping)对象关系映射.

    它在pymysql上进行一层封装,对于数据操作,不需要再去写原生sql语句,

    我们可以基于面向对象的思想去编写类,对象,调用相应的方法,ORM会将这个转换,映射成原生SQL然后交给pymysql执行.

    数据操作前戏

    1. 先去创建数据库.

    mysql> create database hello world

    1. 在settings.py中去配置数据库,
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql', # 使用mysql数据库
            'NAME': 'hello_world',          # 要连接的数据库
            'USER': 'root',         # 链接数据库的用于名
            'PASSWORD': '',         # 链接数据库的用于名
            'HOST': '127.0.0.1',    # mysql服务监听的ip
            'PORT': 3306,           # mysql服务监听的端口
            'CHARSET': 'utf8',
            'ATOMIC_REQUEST': True, #设置为True代表同一个http请求所对应的所有sql都放在一个事务中执行
                                    #(要么所有都成功,要么所有都失败),这是全局性的配置,如果要对某个
                                    #http请求放水(然后自定义事务),可以用non_atomic_requests修饰器
            'OPTIONS': {
                "init_command": "SET storage_engine=INNODB", #设置创建表的存储引擎为INNODB
            }
        }
    }
    
    1. Django orm底层操作数据库python模块默认是mysqldb模块,所以之后将mysqldb模块改为pymysql模块

    在__init__.py里面添加两行代码

    import pymysql
    pymysql.install_as_MySQLdb() # 替换
    

    4.如果你向查看orm语句内部真正的sql语句有两种方式
    1.如果是queryset对象 可以直接点query查看
    2.配置文件中 直接配置

    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'handlers': {
            'console':{
                'level':'DEBUG',
                'class':'logging.StreamHandler',
            },
        },
        'loggers': {
            'django.db.backends': {
                'handlers': ['console'],
                'propagate': True,
                'level':'DEBUG',
            },
        }
    }
    

    在模型层里面创建表

    from django.db import models
    class Book(models.Model):
        titile = models.CharField(max_length=32)
        price = models.DecimalField(max_digists=8,decimal_places=2)
        publish_date = models.DateField()
        # 在定义一个__str__打印对象的时候便于识别
        def __str__(self):
            return self.name+'对象'
    

    两条命令

    生成数据库迁移记录的文件,而且是放在migrations文件夹里的

    python manage.py makemigrations

    真正提交到数据库命令

    python manage.py migrate

    开始操作之前配置一下Django测试环境可以提高开发效率

    from djang.test import TestCase
    import os
    if __name__ =="__main__":
    	os.environ.setdefault("DJANGO_SETTINGS_MODULE","app01.settings")
        import django
        from app01 import models
        
    

    ​ ORM查询
    ​ """

    ​ LOGGING = {
    ​ 'version': 1,
    ​ 'disable_existing_loggers': False,
    ​ 'handlers': {
    ​ 'console': {
    ​ 'level': 'DEBUG',
    ​ 'class': 'logging.StreamHandler',
    ​ },
    ​ },
    ​ 'loggers': {
    ​ 'django.db.backends': {
    ​ 'handlers': ['console'],
    ​ 'propagate': True,
    ​ 'level': 'DEBUG',
    ​ },
    ​ }}



    ​ django测试环境搭建
    ​ import os

        if __name__ == "__main__":
            os.environ.setdefault("DJANGO_SETTINGS_MODULE", "one_search.settings")
            import django
            django.setup()
            # 你就可以在下面测试django任何的py文件
    
  • 相关阅读:
    使用PRTG和panabit结合定位网络阻塞的来源
    jQuery实现全选、反选、删除
    ThinkPHP 5接阿里云短信接口
    《存在与时间》读书笔记(三)
    《存在与时间》读书笔记(二)
    自觉原理第十三章自觉情欲之殇
    【原创】自觉原理第十八章红绿灯下的寂静
    自觉原理第十四章欲之殇痛
    追逐文化答案的青春曲上
    自觉与【转载】《大念住经》原经文【中】
  • 原文地址:https://www.cnblogs.com/jhpy/p/12072461.html
Copyright © 2011-2022 走看看