2016-12-13 29 views
0

認爲有從模型運行的遷移定義爲是外鍵參考儲存在Django的水平或MySQLdb的

CREATE TABLE `table2` (
    `id` int(11) NOT NULL DEFAULT '0', 
    `table1_id` int(11) NOT NULL 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 

CREATE TABLE `table1` (
    `id` int(11) NOT NULL DEFAULT '0' 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 

table2創建一個MySQL表。

在這裏表2引用1,這種關係在模型中提到。現在,當我在MySQL中查詢這些表時,我看不到任何類似於從table2到1的引用。

我想知道django是否負責存儲這些關係。如果是這樣,那麼萬一我必須將我的ORM從django更改爲其他東西,我該如何設法遷移這些關係。

另外,如果我把它看作是「ORM只是一個確保這些關係應該遵守的包裝」,那麼爲什麼不在通過遷移創建表時創建這樣的關係。這意味着確保引用成爲表定義的一部分。所以明天如果我選擇使用另一個ORM,我需要做的就是導入表定義。

如果我錯了,請糾正我。

+0

似乎django確實確保這些關係成爲表定義的一部分。我看着錯誤的地方。謝謝大家。 – techsavvy

回答

1

ORM只是處理數據庫,模式和檢索數據的更高級別的方式。它不會存儲任何內容,它只是爲您提供了一種處理架構中定義的以下數據的方法。

您可以在您在此處顯示的模式中看到表2具有table1_id

文檔中的第一行的migrations

遷移是傳播你對模型的改變(添加字段,刪除模型等)到你的數據庫架構的Django的方式。

所以,無論你到達那裏,在它的最後,你都留下了一個與Django完全沒有關係的數據庫模式。

+0

如果我同意ORM只是一個包裝來確保這種關係應該被遵守的事實,那麼爲什麼不在通過遷移創建表的過程中創建這樣的關係。 – techsavvy

+0

@techsavvy - 你的意思是像在db模式中創建'table1_id'字段? – Sayse

+0

嗨@Sayse謝謝你回答這個問題我已經更新了這個問題。這些表是通過在模型中運行遷移創建的。 – techsavvy

0

他們應該如何關聯? Table1_id看起來像對另一個表的引用。

table1_id應該如何填充?如果是全部手動輸入,那麼應該沒有問題。