Django-ORM数据库操作

  1. 云栖社区>
  2. 博客列表>
  3. 正文

Django-ORM数据库操作

武耀文 2018-06-12 17:24:28 浏览424 评论0

摘要: Django框架功能齐全自带数据库操作功能,由于工作中设计巨量的api接口,需要一个很好的web后端服务框架,Django给了莫大的帮助。本文主要介绍Django的ORM框架

背景

Django框架功能齐全自带数据库操作功能,由于工作中设计巨量的api接口,需要一个很好的web后端服务框架,Django给了莫大的帮助。本文主要介绍Django的ORM框架
我们一般对数据库的使用的认识是:

  • 创建数据库,设计表结构和字段
  • 使用 MySQLdb 来连接数据库,并编写数据访问层代码
  • 业务逻辑层去调用数据访问层执行数据库操作

ORM是什么?

ORM:Object Relational Mapping(关系对象映射),在django中,根据代码中的类自动生成数据库的表也叫--code first。

  • 类名对应------》数据库中的表名
  • 类属性对应---------》数据库里的字段
  • 类实例对应---------》数据库表里的一行数据
  • obj.id obj.name.....类实例对象的属性

Django ORM的优势:

Django的orm操作本质上会根据对接的数据库引擎,翻译成对应的sql语句;所有使用Django开发的项目无需关心程序底层使用的是MySQL、Oracle、sqlite....,如果数据库迁移,只需要更换Django的数据库引擎即可。

总的来说,Django的ORM 在设计初已经考虑了大量web设计中数据库操作的共有需求,配置好数据库后,就可以像使用变量模型一样操作数据库中数据。

一、数据库配置(MySQL)

1、创建数据库 (注意设置 数据的字符编码)
由于Django自带的orm是data_first类型的ORM,使用前必须先创建数据库
2、修改project中的settings.py文件中设置 连接 MySQL数据库(Django默认使用的是sqllite数据库)

DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME':'you mysql db name ',
    'USER': 'user name',
    'PASSWORD': 'password',
    'HOST': 'your mydql db host',
    'PORT': 'your mysql db port',
    }
}

扩展:查看orm操作执行的原生SQL语句,在project中的settings.py文件增加。


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

3、由于Django2.X后只支持python3,而目前MySQLdb对python3没有支持,所以需要使用pymysql,在django项目中修改project 中的__init__py 文件设置 Django默认连接MySQL的方式

import pymysql
pymysql.install_as_MySQLdb()

4、setings文件注册APP

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01.apps.App01Config',
   
]

注册APP后,Django会根据APP的名称等生成并使用表/库。Django中数据库必须有非空主键,而且如果没有声明,所有的字段都会默认设计成非空。

  1. 按照规则在models.py模块中设计表。
  2. 数据迁移操作。
python manage.py makemigrations  #根据app下的migrations目录中的记录,检测当前model层代码是否发生变化?
python manage.py migrate         #把orm代码转换成sql语句去数据库执行
python manage.py migrate --fake    #只记录变化,不提交数据库操作

注:由于所有字段都默认是非空,所以在增加字段时会报错,
image
解决办法是增加:null=Ture,声明。

【云栖快讯】你想见的Java技术专家都在这了,向大佬提问,有问题必答  详情请点击

网友评论

武耀文
文章60篇 | 关注32
关注
操作审计(ActionTrail)会记录您的云账户资源操作,提供操作记录查询,并可以将记录文... 查看详情
用配置管理(Application Configuration Management,简称 ... 查看详情
RDS是一种稳定可靠、可弹性伸缩的在线数据库服务。支持MySQL、SQL Server、Po... 查看详情
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效... 查看详情
阿里云总监课正式启航

阿里云总监课正式启航