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.pswp.cn/news/538471.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538471.shtml
英文地址,請注明出處:http://en.pswp.cn/news/538471.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python查詢缺失值所在位置_Python Pandas找到缺失值的位置方法

問題描述:python pandas判斷缺失值一般采用 isnull(),然而生成的卻是所有數據的true/false矩陣,對于龐大的數據dataframe,很難一眼看出來哪個數據缺失,一共有多少個缺失數據,缺失數據的位置。首…

快學Scala習題解答—第二章 控制結構和函數

原文地址:http://blog.csdn.net/ivan_pig/article/details/8253068 ---------------------------------------------------------------------------------- 3 控制結構和函數 3.1 一個數字如果為正數,則它的signum為1;如果是負數,則signum為-1;如果為0…

java barrier_Java - Latch和Barrier的區別

之所以把Latch與Barrier放在一起比較是因為他們給人一種相似的感覺。他們都是阻塞一些行為直至某個事件發生,但Latch是等待某個事件發生,而Barrier是等待線程。先比較一下JCIP中對二者的描述:LatchA latch is a synchronizer that can delay …

Kingback小組沖刺博客

一、6月13日 1、今日完成的任務 李可欣 項目首頁的框架設計 項目首頁的導航欄部分 對于項目的配色進行了改進,并且設計了logo 楊帆 今天進行了數據庫的設計,完成了數據庫的增刪改查,并建立了兩個jsp頁面,還學習了一些數據庫設計的…

用python前端html后端django_淺談Django前端后端值傳遞問題

前端后端傳值問題總結前端傳給后端通過表單傳值1、通過表單get請求傳值在前端當通過get的方式傳值時,表單中的標簽的name值將會被當做action的地址的參數此時,在后端可以通過get請求相應的name值拿到對應的value值例子:html中:{% csrf_token %}類別{% fo…

使用Git上傳本地項目到oschina

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

手動創建git忽略push清單,node_module以及自身

1.文件夾內右鍵git bash,輸 touch .gitignore,注意中間有空格 2.編輯器打開生成的 .gitignore 文件,加入 .gitignore node_modules12 3.保存 4.以后再push到倉庫的就會過濾這倆了,想加啥自己加

整數數組按絕對值排序

2019獨角獸企業重金招聘Python工程師標準>>> 題目: 給出一組整數數組,要求按照絕對值從小到大進行排序后輸出。 可以用經典的冒泡排序法來計算此問題,計算過程: 1、比較相鄰兩個元素絕對值,如果第一個比第二…

python定時任務是異步的嗎_定時任務、異步任務

------------定時任務、異步任務--------pip install celery --targetD:\Users\ex-ouyangl003\PycharmProjects\data_new\dg_meta_system\metadata_system\venv\Lib\site-packages# coding:utf-8from apscheduler.schedulers.blocking import BlockingSchedulerimport datetime…

java excel自動保存_java讀取excel的內容(可保存到數據庫中)

//**poi jar包//public classReadExcel {SuppressWarnings("static-access")private staticString getValue(HSSFCell hssfCell) {if (hssfCell.getCellType() hssfCell.CELL_TYPE_BOOLEAN) {//返回布爾類型的值returnString.valueOf(hssfCell.getBooleanCellValue()…

《快學Scala》勘誤

原文鏈接:http://www.blogjava.net/sean/archive/2012/11/15/391386.html ---------------- 第11頁(練習): 在Scala REPL中鍵入3,然后按Tab鍵 應為 在Scala REPL中鍵入3.,然后按Tab鍵 第19頁&#xff0…

二分排序java實現

1.什么是二分排序: 二分排序是指利用二分法的思想對插入排序進行改進的一種插入排序算法,不同于二叉排序,可以利用數組的特點快速定位指定索引的元素; 算法思想:二分法插入排序是在插入第i個元素時,對前面的…

pearson相關系數_pearson相關系數與典型相關性分析(CCA)

本文主要介紹相關系數的概念,以及簡單相關系數中的pearson相關系數及其局限性。隨后介紹pearson相關系數無法解決的問題(兩個變量組之間的相關性問題)的解決方案。1、pearson相關系數在日常中,我們經常會遇到一些關于相關性的分析,例如&#…

快學Scala習題解答—第三章 數組相關操作

原文鏈接:http://blog.csdn.net/ivan_pig/article/details/8257365 -------------------------------------------------- 4 數組相關操作 4.1 編寫一段代碼,將a設置為一個n個隨機整數的數組,要求隨機數介于0(包含)和n(不包含)之間 random和…

seo自動工具_愛站SEO工具包詳細介紹

愛站SEO工具-seoer的瑞士軍刀!這個工具主要是為了方便SEOer查詢一些網站的問題,監控關鍵詞排名收錄等等,新手老手都可以用的工具,更快的讓SEOer上手。相信有很多SEOer都使用過愛站SEO工具包,也有很多新入行的小伙伴可能…

人物三(依芙蒂法)

轉載于:https://www.cnblogs.com/song1900/p/9189921.html

常用Oracle分析函數詳解

原文鏈接:http://www.cnblogs.com/benio/archive/2011/06/01/2066106.html --------------------------------------------------------------------------- 學習步驟: 1. 擁有Oracle EBS demo 環境 或者 PROD 環境 2. copy以下代碼進 PL/SQL 3. 配合解…

XML文件結構和基本語法

XML文件的結構性內容,包括節點關系以及屬性內容等等。元素是組成XML的最基本的單位,它由開始標記,屬性和結束標記組成。就是一個元素的例子,每個元素必須有一個元素名,元素可以若干個屬性以及屬性值。 xml文件和html文…

python表格數據分類聚合_3-python數據分析-pandas高級操作之替換、映射、隨機抽樣、分組、高級數據聚合、數據加載、透視表、交叉表...

3-python數據分析-pandas高級操作之替換、映射、隨機抽樣、分組、高級數據聚合、數據加載、透視表、交叉表替換操作 replace替換操作可以同步作用于Series和DataFrame中單值替換普通替換: 替換所有符合要求的元素:to_replace15,value’e’按列指定單值替換&#xff…

oracle-SQL-case when 改用 DECODE

SELECT CASE FLOOR_LINE_ID WHEN 1 THEN 高鐵 WHEN 2 THEN 高速 WHEN 3 THEN 公路 WHEN 5 THEN 地鐵 ELSE 其他 END AS LINE_NAME, FLOOR_LINE_ID FROM ( SELECT FLOOR(LINE_ID/100) AS FLOOR_LINE_ID FROM DT4_LINE_NAME ) 改…