1. 程式人生 > >Django下mysql資料庫的相關操作(建立資料表、以及增刪查改)

Django下mysql資料庫的相關操作(建立資料表、以及增刪查改)

如有疑惑或錯誤之處可評論或郵箱聯絡博主:[email protected]

本文主要記錄了在django下使用mysql資料庫時的相關操作,包括建立資料庫、資料表、以及增刪查改。
博主開發環境:Ubuntu16.04,python2.7,django1.11,mysql5.7

  • 資料庫(database)建立
  • 資料表(table)建立
  • 資料庫的增刪查改四個基本操作

本文采用的資料模型

假設我們以某校學生資訊例,針對其資料儲存建立一個簡單的資料模型:
學生資訊的儲存進行分學院儲存,例如計算機學院,電子工程學院等等。該部分我們對應College模型,有欄位學院名name, 描述description(學院資訊的相關介紹), 管理人員manager。
在每個學院中細分為各個專業。對應模型Major,有欄位專業名name, 外來鍵College(College與Major為一對多關係)。
在每個班級中,儲存每個學生的個人資訊。對應Student模型,有欄位學生姓名name, 學號student_id, 外來鍵Major(Major與Student為一對多關係)。

1. 資料庫student_info的建立

在電腦上安裝完mysql資料庫的前提下,我們使用sql語句建立student_info資料庫

CREATE DATABASE student_info

2. 資料表的建立

自定義table名字方法:
為節省你的時間,Django 會根據模型類的名稱和包含它的應用的名稱自動指定資料庫表名稱。一個模型的資料庫表名稱,由這個模型的“應用標籤”(在manage.py startapp中使用的名稱)和模型類名稱之間加上下劃線組成。
舉個例子, bookstore應用(使用 manage.py startapp bookstore 建立),裡面有個名為 Book的模型,那資料表的名稱就是 bookstore_book 。

我們也可以使用 Meta類中的 db_table 引數來重寫資料表的名稱。
在 MySQL中使用小寫字母為表命名
當你通過db_table覆寫表名稱時,強烈推薦使用小寫字母給表命名,特別是如果你用了MySQL作為後端。詳見MySQL注意事項 。

在這裡我們展示自己為資料表命名的程式碼塊:

from __future__ import unicode_literals
from django.db import models
class Test(models.Model):
    name = models.CharField(max_length=20, primary_key=True
) #primary_key=True表示個自定義主鍵欄位,只要在某個欄位上制定primary_key=True #如果 Django 看到你顯式地設定了 Field.primary_key,就不會自動新增 id 列。 #max_length表示允許輸入的最大字元個數 class Meta: db_table = "self_table_name"

相關說明:
每個欄位有一些特有的引數。例如,CharField(和它的派生類)需要max_length 引數來指定VARCHAR 資料庫欄位的大小。
還有一些適用於所有欄位的通用引數。 這些引數在參考中有詳細定義,這裡我們只簡單介紹一些最常用的:
null
如果為True,Django 將會把資料庫中空值儲存為NULL。預設值是 False.
blank
如果為True,該欄位允許為空值,預設為False。
要注意,這與 null 不同。null純粹是資料庫範疇,指資料庫中欄位內容是否允許為空,而 blank 是表單資料輸入驗證範疇的。如果一個欄位的blank=True,表單的驗證將允許輸入一個空值。如果欄位的blank=False,該欄位就是必填的。

針對本文所採用的資料模型建立三個資料表:
程式碼塊如下:

from __future__ import unicode_literals
from django.db import models
from django.contrib.auth.models import User

class College(models.Model):
    name = models.CharField(max_length=30)
    description = models.CharField(max_length=100)
    manager = models.ForeignKey(User, blank=True, null=True)

    def __str__(self):
        return self.name

class Major(models.Model):
    name = models.CharField(max_length=30)
    colleage= models.ForeignKey(College, on_delete=models.CASCADE, related_name='majors')

    def __str__(self):
        return self.name

class Student(models.Model):
    name = models.CharField(max_length=30)
    student_id = models.IntegerField()
    major = models.ForeignKey(Major, on_delete=models.CASCADE)

    def __str__(self):
        return self.name

相關說明:

  1. 外來鍵ForeignKey()
    在模型中定義外來鍵時,同步資料庫後,django預設在外來鍵欄位名後加上”_id”作為資料庫表的列名。
    ForeignKey()相關引數如下:
    1.1 - - - - on_delete:
    當刪除 “一” 模型物件時,django會根據該引數的值對與該物件相關聯的其他物件(也就是 ‘多’)進行操作。
    預設為models.CASCADE 級聯刪除。當刪除’一’時,‘多’會被刪除。modles.PROTECT : 當刪除一個具有外來鍵關係的物件時,會引發一個異常,阻止刪除該物件
    models.SET_NULL: 設定刪除物件所關聯的外來鍵欄位為null。但欄位的null屬性必需為True
    models.SET_DEFAULT : 設定刪除物件所關聯的外來鍵欄位為預設的值。
    models.SET(value) :設定刪除物件所關聯的物件的外來鍵欄位為value,value也可以是一個可呼叫函式。
    1.2 - - - - related_name
    反向查詢: 如我們在Major模型的外來鍵major欄位中設定realted_name=’majors’,可以在關係的另一端,即College端反向查詢到Major

注意:每一次修改模型後,我們都需要確保執行manage.py makemigrations 給應用生成遷移指令碼,並接著執行manage.py migrate

3. 資料庫的增刪查改四個基本操作

增加

from django.http import HttpResponse
from testModel.models import Test

# 新增資料
def dbInsert(request):
  test1 = Test(name='insert context')
  test1.save()
  return HttpResponse("<p>資料新增成功!</p>")

刪除

from django.http import HttpResponse
from testModel.models import Test


# 刪除資料
def dbDelete(request):
    # 刪除id=1的資料
    test1 = Test.objects.get(id=1)
    test1.delete()

    # 另外一種方式
    # Test.objects.filter(id=1).delete()

    # 刪除所有資料
    # Test.objects.all().delete()

    return HttpResponse("<p>刪除成功</p>")

查詢

from django.http import HttpResponse
from testModel.models import Test

#獲取資料
def dbGet(request):

    # 通過objects這個模型管理器的all()獲得所有資料行,相當於SQL中的SELECT * FROM
    list = Test.objects.all()
    #  filter相當於SQL中的WHERE,可設定條件過濾結果
    response2 = Test.objects.filter(id=1)
    # 獲取單個物件
    response3 = Test.objects.get(id=1)
    # 限制返回的資料 相當於 SQL 中的 OFFSET 0 LIMIT 2;
    Test.objects.order_by('name')[0:2]
    # 資料排序
    Test.objects.order_by("id")
    # 上面的方法可以連鎖使用
    Test.objects.filter(name="name context").order_by("id")
    # 輸出所有資料
    for var in list:
        response1 += var.name + " "
        response = response1
        return HttpResponse("<p>" + response + "</p>")

修改

from django.http import HttpResponse
from testModel.models import Test

# 更改資料
def dbUpdate(request):
    # 修改其中一個id=1的name欄位,再save,相當於SQL中的UPDATE
    test1 = Test.objects.get(id=2)
    test1.name = 'name_update'
    test1.save()

    # 另外一種方式
    # Test.objects.filter(id=1).update(name='name_update')

    # 修改所有的列
    # Test.objects.all().update(name='name_update')

    return HttpResponse("<p>修改成功</p>")

相關推薦

Djangomysql資料庫相關操作建立資料以及增刪

如有疑惑或錯誤之處可評論或郵箱聯絡博主:[email protected] 本文主要記錄了在django下使用mysql資料庫時的相關操作,包括建立資料庫、資料表、以及增刪查改。 博主開發環境:Ubuntu16.04,python2.7,d

C# 用Linq的方式實現對Xml檔案的基本操作建立xml檔案增刪改xml檔案節點資訊

1 private static void GetXmlNodeInforOld( string xmlPath) 2 { 3 try 4 { 5

Python3----對遠端windows server 2003伺服器的mysql資料庫中指定庫建立資料

Python3—-對遠端windows server 2003伺服器的mysql資料庫中指定庫建立資料表 1、參考資料庫的資料表的格式 2、Python程式碼: # -*- coding:

Mysql 資料庫基本操作1

1、庫的管理 1)庫的基本操作: ①檢視所有庫:show databases; ②建立庫(指定字符集):create database 庫名 character

MYSQL資料庫練習題操作select大全

1、建立表 表一:student學生use) 1、create table student( sno varchar(20) primary key not null comment'學號(主碼)', sname varchar(20) not null comment'學生姓名',

mysql資料庫相關操作.md

對資料庫/表的操作 建立資料庫 create database dbname 建立資料表 create table tb_name(); 顯示資料庫/資料表 show databas

MySQL完整性相關操作練習題

1. 新增表Student的主碼為Sno,表Course的主碼為Cno,表SC的主碼為(Sno,Cno); 2. 新增表Course的外碼為Cpno,參照Course表的Cno; 3. 新增表SC的外碼為Sno和Cno,分別參照Student的Sno和Course的Cno

MySQL資料庫基本操作DDL

1.mysql -hlocalhost -uroot -p123   登陸 2.show databases;   檢視資料庫資訊 3.use XXX;    使用XXX資料庫 4.show tables;   檢視資料表 5.如何通過命令更改使用者資訊 use mysql

mysql資料庫基本操作

資料表操作 基礎操作 1.建立表(類似於一個excel表) create table tab_name( field1 type[完整性約束條件], field2 type, ... field

mysql資料庫基本操作四)

表紀錄操作        同樣,表紀錄也有增刪改查的操作,但是一般我們大概70%的操作都是在查資料,所以查的操作需要單獨說清楚,先簡單看看增刪改。 表紀錄的增、刪、改      1.增加一條紀錄的方式: insert [into

mysql資料庫基本操作

表紀錄之查(單表查詢)2        上一篇講了4類查詢的方式,現在接著上一篇繼續看還有哪些方式。 group by 分組查詢       顧名思義,分組查詢要分組,因為mysql5.7之後預設不支援group by語句,需要改配置

mysql資料庫基本操作

  外來鍵約束 建立外來鍵        前面講的表單查詢都是一張表,但專案中表與表之間是有關聯的,比如我們建立的學生表,他們可能在不同班級,不同班級有不同的班主任,他們之間的關係大概是這樣的:每一個班主任會對應多個學生 , 而每個學生只能對應一個班主任。所以

進入MySQL資料庫的大門學習筆記,有你就夠了

一、初識資料庫 1、什麼是資料庫 資料庫叫database ,簡稱DB,是長期存放在計算機內,有組織、可共享的大量資料的集合;資料庫就是存放資料的倉庫,專業的資料庫系統具有較小的資料冗餘度,較高的資料安全性,易擴充套件性。 資料庫設計原則: mysql主要優勢:一個應用對

Java操作MongoDB資料庫CRUD增刪

Java操作MongoDB資料庫CRUD(增刪查改) 藉助mongo-java-driver包,對MongoDB資料庫的集合(DataTable)及文件(BSON物件資料)進行增刪查改操作。本文的核心在於查詢操作,善用mongo-java-driver包下的Iterable迭代器、fin

C語言操作mysql範例增刪

    C程式碼的API是隨MySQL一起釋出的. 它包含在mysqlclient庫中, 可以使C程式來訪問資料庫.     MySQL原始碼包中的許多客戶端都是用C寫的. 如果你正在找使用這些C API的例子, 可以看看客戶端的寫法.你可以在MySQL原始碼包的clie

go語言操作mysql範例增刪

    go官方僅提供了database package,database package下有兩個包sql,sql/driver。這兩個包用來定義操作資料庫的介面,這就保證了無論使用哪種資料庫,他們的操作方式都是相同的。     但go官方並沒有提供連線資料庫的drive

NPOI對Excel的操作Sheet轉DataTableList<T>

lln int32 rtt ole num r+ pro tab ces 1 using System.Collections.Generic; 2 using NPOI.HSSF.UserModel; 3 using NPOI.SS.UserModel; 4

Python學習筆記_05:使用Flask+MySQL實現用戶登陸註冊以及增刪操作

英文博客 註冊頁面 con 實現 sof 來源 doc 學習過程 microsoft 前言:本文代碼參考自兩篇英文博客,具體來源點擊文末代碼鏈接中文檔說明。 運行效果: 首頁: 註冊頁面: 登陸界面: 管理員登陸後界面: 添加、刪除、修改和查詢員工所

MySQL學習筆記1增刪

nbsp 之間 values 自動 mon name mes 函數 mar 創建表: /* 創建數據庫 create database 數據庫名; */ CREATE DATABASE mybase; /* 使用數據庫 use 數據庫名 */ US

android-一個檔案搞定SQLite資料庫建立與更新以及增刪

一、SQLite簡介 1、簡介 Android嵌入式關係型資料庫——SQLite。SQLite 是一款輕量級的關係型資料庫,它運算速度快, 佔用資源很少,通常只需要幾百 K 的記憶體就足夠了,因而特別適合在移動裝置上使用。SQLite 支援標準的 SQL 語法,還遵循