国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Django之主鍵外鍵詳解

這篇具有很好參考價值的文章主要介紹了Django之主鍵外鍵詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

在ORM操作處了解的文章中,我們已經(jīng)初步接觸到了主鍵與外鍵的字段定義,那么本文以詳細介紹主鍵外鍵的使用方法等

1.外鍵

在Django中,外鍵是一種關(guān)系字段,用于建立不同模型之間的關(guān)聯(lián)關(guān)系。外鍵字段允許一個模型引用另一個模型的主鍵,從而創(chuàng)建模型之間的關(guān)系。
使用外鍵可以實現(xiàn)數(shù)據(jù)庫之間的關(guān)聯(lián),例如一個博客文章可以有多個評論,每個評論又關(guān)聯(lián)到一個特定的博客文章。在這種情況下,可以在評論模型中使用外鍵字段來引用博客文章模型的主鍵。
在Django中,定義外鍵字段非常簡單。只需在模型中的字段中使用ForeignKey類,并指定關(guān)聯(lián)的模型作為參數(shù)。例如:

class Personnel(models.Model):
    id = models.AutoField(verbose_name="工號", primary_key=True, db_index=True)
    name = models.CharField(verbose_name="姓名", max_length=16, null=False)
    age = models.PositiveIntegerField(verbose_name="年齡", default=1)

class Contact(models.Model):
    con_id = models.AutoField(verbose_name="聯(lián)系表序號", primary_key=True)
    phone = models.CharField(verbose_name="手機號碼", max_length=16, null=False)
    address = models.TextField(verbose_name="住址", default='宿舍')
    work_id = models.ForeignKey(to="Personnel", on_delete=models.SET_NULL, null=True)

那么在以上代碼中有兩個模型,分別是Personnel模型和Contact模型,其中Personnel模型中設(shè)定了id這個字段為主鍵,Contact模型設(shè)定了con_id這個字段為主鍵,work_id為外鍵,讓我們細看work_id這個字段的定義:

  • to:需要傳遞被外鍵連接的主表模型作為值,如果連接時主表模型還沒定義,建議使用主表模型類名加上"",這樣就不會報錯。
  • on_delete:需要傳遞當主表中的一條數(shù)據(jù)刪除時,從表中與這條數(shù)據(jù)相關(guān)聯(lián)的數(shù)據(jù)要執(zhí)行怎樣的動作。
  • to_field:允許你指定要引用的目標模型中的特定字段作為外鍵

to和on_delete這兩個參數(shù)不可避免,但to_field參數(shù)不指定,一般會默認為連接的主表的主鍵。
那么現(xiàn)在讓我們看看on_delete這個參數(shù)里面有哪些選項:

  • models.CASCADE:級聯(lián)操作,當主表中被連接的一條數(shù)據(jù)刪除時,從表中所有與之關(guān)聯(lián)的數(shù)據(jù)同時被刪除
  • models.SET_NULL:當主表中的一行數(shù)據(jù)刪除時,從表中所有與之關(guān)聯(lián)的數(shù)據(jù)的相關(guān)字段設(shè)置為null,此時注意定義外鍵時,這個字段必須可以允許為空
  • models.PROTECT:當主表中的一行數(shù)據(jù)刪除時,由于從表中相關(guān)字段是受保護的外鍵,所以都不允許刪除
  • models.SET_DEFAULT:當主表中的一行數(shù)據(jù)刪除時,從表中所有相關(guān)的數(shù)據(jù)的關(guān)聯(lián)字段設(shè)置為默認值,此時注意定義外鍵時,這個外鍵字段應該有一個默認值,default也可以是一個函數(shù)(在任意字段均可),此時可以,注意這時只傳遞函數(shù)名稱,django在操作時會幫我們自動執(zhí)行
def publisher():
    return Publisher.objects.get(pk=1)

class Book(models.Model):
   name = models.CharField(max_length=64,blank=True)
   content = models.TextField(blank=True)
   pub_time = models.DateTimeField(auto_now_add=True)
   publisher = models.ForeignKey(Publisher,on_delete=models.SET_DEFAULT,null=True,default=publisher)
  • models.SET():當主表中的一條數(shù)據(jù)刪除時,從表中所有的關(guān)聯(lián)數(shù)據(jù)字段設(shè)置為SET()中設(shè)置的值,與models.SET_DEFAULT相似,只不過此時從表中的相關(guān)字段不需要設(shè)置default參數(shù)
  • models.DO_NOTHING:什么都不做,一切都看數(shù)據(jù)庫級別的約束,注數(shù)據(jù)庫級別的默認約束為RESTRICT,這個約束與django中的models.PROTECT相似
2.主鍵

Django是一個流行的Python Web框架,它提供了許多強大的功能和工具,用于簡化開發(fā)高性能、可擴展的Web應用程序。其中一個關(guān)鍵概念是主鍵(Primary Key),它在數(shù)據(jù)庫中用于唯一標識每個記錄。
在Django中,主鍵是一個特殊的字段,用于確保每個數(shù)據(jù)庫記錄的唯一性。默認情況下,Django會自動為每個模型(Model)添加一個名為"id"的主鍵字段,該字段使用自增長整數(shù)作為唯一標識符。
主鍵在數(shù)據(jù)庫中起著非常重要的作用。它不僅用于確保數(shù)據(jù)的唯一性,還可以用作數(shù)據(jù)之間的關(guān)聯(lián)。通過在模型中定義外鍵(Foreign Key),可以輕松地建立表與表之間的關(guān)系,實現(xiàn)數(shù)據(jù)的連接和查詢。
Django提供了多種主鍵類型,可以根據(jù)實際需求選擇合適的類型。除了默認的自增長整數(shù)主鍵,還可以使用UUID、字符型字段等作為主鍵。這樣可以更好地適應不同類型的應用程序和數(shù)據(jù)庫需求。
在使用Django開發(fā)應用程序時,主鍵的正確使用非常重要。它不僅能夠提高數(shù)據(jù)的查詢效率和準確性,還可以簡化代碼邏輯和數(shù)據(jù)管理。通過合理地設(shè)計和使用主鍵,可以實現(xiàn)更高效、可靠的Web應用程序。
總而言之,Django的主鍵是確保每個數(shù)據(jù)庫記錄的唯一性和關(guān)聯(lián)性的重要工具。它為開發(fā)人員提供了靈活的選擇,以滿足各種應用程序和數(shù)據(jù)庫需求。正確地使用主鍵可以提高數(shù)據(jù)管理和查詢效率,同時簡化代碼邏輯。文章來源地址http://www.zghlxwxcb.cn/news/detail-726641.html

到了這里,關(guān)于Django之主鍵外鍵詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • 如何在Insert插入操作之后,獲取自增主鍵的ID值

    如何在Insert插入操作之后,獲取自增主鍵的ID值

    MyBatis中,在大多數(shù)情況下,我們向數(shù)據(jù)庫中插入一條數(shù)據(jù)之后,并不需要關(guān)注這條新插入數(shù)據(jù)的主鍵ID。我們也知道,正常在DAO中的插入語句雖然可以返回一個int類型的值,但是這個值表示的是插入影響的行數(shù),而不是新插入數(shù)據(jù)的主鍵ID。 近期有一個需求,核心是保存一些

    2024年02月09日
    瀏覽(17)
  • mysql如何自定義自增主鍵值,以及所遇到的不生效問題

    mysql如何自定義自增主鍵值,以及所遇到的不生效問題

    最近有一個需求,要求對某些數(shù)據(jù)的數(shù)據(jù)庫主鍵id格式化,要求id為(202311080000)的形式去自增,可以在get請求獲取到這些數(shù)據(jù)時在請求路徑上看到格式化的id,但是之前數(shù)據(jù)id有大于202311080000數(shù)值的,導致自增的主鍵值并沒有生效(即使刪除相關(guān)數(shù)據(jù)) 如何自定義自增主鍵值 第一種通過命

    2024年04月15日
    瀏覽(19)
  • 面試官:MySQL 自增主鍵一定是連續(xù)的嗎?大部分人都會答錯!

    面試官:MySQL 自增主鍵一定是連續(xù)的嗎?大部分人都會答錯!

    MySQL版本:8.0 數(shù)據(jù)庫表:T (主鍵id,唯一索引c,普通字段d) 如果你的業(yè)務設(shè)計依賴于自增主鍵的連續(xù)性,這個設(shè)計假設(shè)自增主鍵是連續(xù)的。但實際上,這樣的假設(shè)是錯的,因為自增主鍵不能保證連續(xù)遞增。 推薦一個開源免費的 Spring Boot 實戰(zhàn)項目: https://github.com/javastacks

    2024年02月06日
    瀏覽(25)
  • Datawhale Django后端開發(fā)入門 Vscode TASK02 Admin管理員、外鍵的使用

    Datawhale Django后端開發(fā)入門 Vscode TASK02 Admin管理員、外鍵的使用

    一.Admin管理員的使用 1、啟動django服務 使用創(chuàng)建管理員之前,一定要先啟動django服務,雖然TASK01和TASK02是分開的,但是進行第二個流程的時候記得先啟動django服務,注意此時是在你的項目文件夾下啟動的,時刻注意要執(zhí)行的文件夾。 我這里又重新創(chuàng)建了一個虛擬環(huán)境,此時的

    2024年02月12日
    瀏覽(24)
  • 主鍵和外鍵的含義及區(qū)別

    表中經(jīng)常有一個列或多個列的組合,其值能唯一的標識表中的每一行。這樣的一列或多列稱為表的主鍵。 外鍵:用來表示表與表之間聯(lián)系,是表中的一個列。 主鍵和外鍵都是用于維護數(shù)據(jù)庫完整性的一種機制。 1、主鍵是唯一標識一條記錄,不能重復,不允許為空;而外鍵可

    2024年02月12日
    瀏覽(36)
  • 主鍵、外鍵、建表范式、MySQL索引、用戶管理

    1.1 問題 完成如下練習: 練習主鍵的創(chuàng)建、查看、刪除、添加、驗證主鍵 練習復合主鍵的使用 練習與auto_increment連用的效果 1.2 方案 主鍵使用規(guī)則: 表頭值不允許重復,不允許賦NULL值 一個表中只能有一個primary key 表頭 多個表頭做主鍵,稱為復合主鍵,必須一起創(chuàng)建和刪除

    2024年01月16日
    瀏覽(26)
  • SQL語句中的主鍵和外鍵

    SQL語句中的主鍵和外鍵

    1.1)主鍵字段定義: 在數(shù)據(jù)庫表中,如果有一組字段能夠 唯一 確定一條記錄,則可以把它們設(shè)計成表的主鍵字段。 例子:如果要創(chuàng)建一個人的信息表( 字段 :姓名,年齡,籍貫,工作單位......),那么身份證號是唯一能確定你這個人的,所以身份證號是主鍵。 1.2) 創(chuàng)建:

    2023年04月08日
    瀏覽(20)
  • SQL Server:主鍵與外鍵設(shè)置與相關(guān)理解

    SQL Server:主鍵與外鍵設(shè)置與相關(guān)理解

    主鍵:表中能夠唯一地辨別事物的屬性。通過主鍵能夠查詢出表中一條完整的記錄,同時使用主鍵能防止表中出現(xiàn)重復的記錄,避免了數(shù)據(jù)的冗余。 外鍵:通俗講就是表中一個屬性是來自另一張表的主鍵,該屬性被稱為該表的外鍵,外鍵可以有不止一個。外鍵存在的意義就是

    2023年04月09日
    瀏覽(28)
  • MySQL:創(chuàng)建數(shù)據(jù)庫,數(shù)據(jù)表,主鍵和外鍵

    MySQL:創(chuàng)建數(shù)據(jù)庫,數(shù)據(jù)表,主鍵和外鍵

    目錄 前言: 安裝MySQL: 打開MySQL: 創(chuàng)建數(shù)據(jù)庫: 查看已建數(shù)據(jù)庫: 查看數(shù)據(jù)庫引擎: 創(chuàng)建數(shù)據(jù)表: ?主鍵約束: 單字段主鍵: 多字段聯(lián)合主鍵: 外鍵約束: MySQL數(shù)據(jù)庫安裝了很久,一直也沒靜下心來學習,因為起步太晚,所以什么都想學點,又感覺有些力不從心,目前

    2023年04月27日
    瀏覽(696)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包