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,声明。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/538471.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kingback小组冲刺博客

一、6月13日 1、今日完成的任务 李可欣 项目首页的框架设计 项目首页的导航栏部分 对于项目的配色进行了改进,并且设计了logo 杨帆 今天进行了数据库的设计,完成了数据库的增删改查,并建立了两个jsp页面,还学习了一些数据库设计的…

使用Git上传本地项目到oschina

原文地址:https://my.oschina.net/158/blog/530112 --------------------------------------------- 1.首先看一下自己是否有公钥, 在 我的资料-->SSH公钥 查看,如果没有,添加自己的SSH 公钥: SSH key 可以让你在…

整数数组按绝对值排序

2019独角兽企业重金招聘Python工程师标准>>> 题目: 给出一组整数数组,要求按照绝对值从小到大进行排序后输出。 可以用经典的冒泡排序法来计算此问题,计算过程: 1、比较相邻两个元素绝对值,如果第一个比第二…

pearson相关系数_pearson相关系数与典型相关性分析(CCA)

本文主要介绍相关系数的概念,以及简单相关系数中的pearson相关系数及其局限性。随后介绍pearson相关系数无法解决的问题(两个变量组之间的相关性问题)的解决方案。1、pearson相关系数在日常中,我们经常会遇到一些关于相关性的分析,例如&#…

seo自动工具_爱站SEO工具包详细介绍

爱站SEO工具-seoer的瑞士军刀!这个工具主要是为了方便SEOer查询一些网站的问题,监控关键词排名收录等等,新手老手都可以用的工具,更快的让SEOer上手。相信有很多SEOer都使用过爱站SEO工具包,也有很多新入行的小伙伴可能…

人物三(依芙蒂法)

转载于:https://www.cnblogs.com/song1900/p/9189921.html

XML文件结构和基本语法

XML文件的结构性内容,包括节点关系以及属性内容等等。元素是组成XML的最基本的单位,它由开始标记,属性和结束标记组成。就是一个元素的例子,每个元素必须有一个元素名,元素可以若干个属性以及属性值。 xml文件和html文…

fatal: Could not read from remote repository.的解决办法

原文地址:http://blog.csdn.net/huahua78/article/details/52330792 --------------------------------------------------------------------------------- 查看远端地址 git remote –v 查看配置 git config --list git status git add . // 暂存所有的更改git…

springmvc是什么_SpringBoot与SpringMVC的区别是什么?

简单的来说:SpringMVC和SpringBoot都是Spring家族的重要成员。Spring家族的使命就是为了简化而生。SpringMVC简化我们日常Web开发的,后来随着自身的发展,SpringMVC变得臃肿复杂,而SpringBoot则进一步简化了SpringMVC开发。SpringM…

git 上传代码到码云

与码云建立连接教程:http://blog.csdn.net/zengmingen/article/details/76045076 如果完成了上面步骤的,且有了git。上传项目步骤: 代码提交 代码提交一般有五个步骤: 1.查看目前代码的修改状态 2.查看代码修改内容 3.暂存需要提交…

visual studio过期登录不了账户_具有最高管理权限账户,Windows 7设置Administrator密码永不过期...

今天介绍操作系统具有最高管理权限的账户,Windows 7如何设置Administrator账户密码永不过期。小伙伴们可能不知道,和Windows Vista操作系统一样,在Windows 7操作系统中是不能预先使用Administrator这个具有最高管理权限的账户的。同时也可能不…

cad隐藏图层命令快捷键_cad快捷键f是什么命令?cad中f快捷键都有哪些?

1. F1 该功能键打开AutoCAD帮助窗口。如果用户遇到此软件中的任何功能问题,它可以使用户在线获得帮助。如果用户离线工作,而不是按此键,则该软件的所有功能都将以PDF格式打开。 2. F2 该键将打开一个弹出屏幕,在底部显示命令行。该命令对于在屏幕底部看不到命令窗口的用户很…

java 高级编程进阶_JAVA高级编程之hibernate进阶学习

二级缓存hibernate的session缓存在事务级别进行持久化数据的缓存操作。 当然,也有可能分别为每个类(或集合),配置集群、或 JVM 级别(SessionFactory 级别)的缓存。你甚至可以为之插入一个集群的缓存。注意,缓存永远不知道其他应用程序对持久化…

SpringMvc+Tomcat+Angular4 部署运行

这次的团队开发是,前端开发人员和后台开发人员完全分开开发的。 前端开发采用了Angular4,webstorm 后端开发采用了:springspringmvcmybatis,eclipse --------------------------------------- 最后要整合了。 1、angular项目编…

IPv4地址分类及特征

IPv4地址分类及特征 IP地址后斜杠和数字代表的意思 其中有这样一个IP地址的格式:IP/数字,例如:111.222.111.222/24这种格式平时在内网中用的不多,所以一下子看不懂,最后查了资料才知斜杠后的数字代表的是掩码的位数 “…

查看Scala编译的.class文件

Scala是基于JDK运行的,必然会生成Java的字节码文件.class文件。 如何查看? 编码IDE:IntelliJ IDEA 2017.2 x64 查看class文件工具:jd-gui scala代码如下: person.scala package cn.zengmg.day26class Person {val …

【原创】利用腾讯和百度的AI接口识别验证码

众所周知,验证码在大部分的实际运用中是绕不开的问题,包括验证,爬虫,测试等等,然后解决验证码的方法也有不少,但大多数都会运用OCR。(这里说的验证码,是字符类型的验证码&#xff09…

java时间日期工具类_java工具类--日期相关;

日期相关Date类1.通常使用的是java.util包2.导包 拿来使用 构建对象3.通常使用无参数的构造方法 或者带long构造方法4.Date类中常用的方法before(); after();setTime() getTime()compareTo(); -1 1 0;5.可以处理一个Date类型的格式DateFormat类1.包java.text 需要导包使用2.此类…

/* compiled code */ ?

原因:这是所用的ide自带了反编译工具,反编译的。不是具体的源码 具体的源码需要手动关联源码包

重新学习Ubuntu -- 截图软件的选择和安装

前面两篇完成了:系统的安装和系统安装后的优化。 截图软件 shutterflameshot 这个根据自己原来的学习经验和网上的相关资料来完成截图软件的安装。参照文章: shutter :Ubuntu 18.04/LinuxMint 19中启用Shutter编辑功能 flameshot:Flameshot:你…