外键引用是存储在django级别还是MySQLDB中

时间:2016-12-13 07:40:08

标签: python mysql django

考虑创建一个以

创建的mysql表
CREATE TABLE `table1` (
  `id` int(11) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=latin1

table2定义为

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

从模型中运行迁移。

此处表2引用了1,并且在模型中提到了这种关系。现在,当我在MySQL中查询这些表时,我看不到类似于从table2到1的引用。

我想知道django是否有责任存储这种关系。如果是这样,那么万一我必须将我的ORM从django更改为其他东西,我该如何设法迁移这些关系。

此外,如果我将其视为" ORM只是一个包装器,以确保应该遵守这种关系"那么为什么不通过迁移在表创建过程中创建这样的关系。这意味着确保引用成为表定义的一部分。所以明天,如果我选择使用另一个ORM,我需要做的就是导入表定义。

如果我错了,请纠正我。

2 个答案:

答案 0 :(得分:1)

ORM只是处理数据库,模式和检索数据的更高级别方式。它不会存储任何内容,它只是为您提供了一种处理模式中定义的以下数据的方法。

您可以在此处显示的架构中看到table2有table1_id

migrations文档中的第一行:

  

迁移是Django将您对模型所做的更改(添加字段,删除模型等)传播到数据库模式中的方法。

所以,无论你到达那里,最后,你都会留下一个与Django毫无关系的数据库架构。

答案 1 :(得分:0)

他们应该如何相关? Table1_id看起来像是对另一个表的引用。

如何填充table1_id?如果全部是手动输入,那么应该没有问题。