Django 当前不提供对跨多数据库的外键或多对多关系任何支持。如果已经使用路由来分隔模型到不同数据库,那么通过这些模型来定义的任何外键和多对多关系必须在单一数据库内。
这是因为参照完整性。为了维护两个对象之间的关系,Djagno 需要知道这个相关对象的外键是否是合法的。如果外键被保存在单独的数据库上,则无法轻松评价外键的合法性。
如果你正在使用 Postgres,Oracle,或支持 InnoDB 的 MySQL,这是在数据库完整性级别上强制执行的——数据库级别的键约束防止创建无法验证的关系。
然而,如果你正在使用 SQLite 或支持 MyISAM 表的MySQL,这就不会强制参照完整性;因此,你可以伪造跨数据库的外键。尽管 Django 并没有正式支持这个设置。
一些贡献应用包括模型,一些应用依赖于其他应用。 由于跨数据库关系是不可能的,因此这会对如何跨数据库拆分这些模型产生一些限制:
contenttypes.ContentType
,sessions.Session
和sites.Site
中的每一个都可以存储在任何数据库中。auth
模型 - User
,Group
和Permission
- 链接在一起并链接到ContentType
,因此它们必须与ContentType
存储在同一个数据库中。admin
依赖于auth
,所以它的模型必须和auth
在同一个数据库中。flatpages
和redirects
依赖于sites
,所以他们的模型必须和sites
在同一个数据库中。注意:如果要将内容类型同步到多个数据库,请注意它们的主键可能在数据库之间不匹配。这可能导致数据损坏或数据丢失。
因为大部分的标准 QuerySet 方法能直接从 Manager 访问,这个实例仅适用于你在自定义 QuerySet 中定义了额外方法,...
本教程从教程第 5 部分结束的地方开始。我们已经建立了一个经过测试的网络投票应用程序,现在我们将添加一个样式表和一个图像。...
Java Swing教程 -Java Swing JTextFieldJTextField可以处理一行纯文本。它的构造函数接受以下三个值的组合。A string - specifie...
Java Swing教程 -Java Swing拖放拖放(DnD)是一种在应用程序中传输数据的方法。DnD允许我们通过拖动组件并将其拖放到另一个组件上...