Django-orm操作的基础认识

muzirigel 2019-12-20

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文件

相关推荐

jiong / 0评论 2020-09-17