Django-orm操作的基础认识
Posted jhpy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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执行==.
数据操作前戏
- 先去创建数据库.
mysql> create database hello world
- 在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
}
}
}
- 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文件
以上是关于Django-orm操作的基础认识的主要内容,如果未能解决你的问题,请参考以下文章