首页  >  文章  >  数据库  >  当遇到限制时,如何在 Django 中跨不同数据库实现外键?

当遇到限制时,如何在 Django 中跨不同数据库实现外键?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-29 15:03:02935浏览

How do I implement Foreign Keys across different databases in Django when facing limitations?

如何在 Django 中实现跨不同数据库的外键

在 Django 中,利用外键对于建立存储的对象之间的关系至关重要跨多个数据库。但是,当涉及不同数据库的模型时,此过程可能会带来挑战。

了解跨数据库外键限制

Django 目前禁止之间的外键关系模型驻留在单独的数据库中。此限制源于缺乏对跨数据库关系的支持。如果您使用数据库路由器对模型进行分区,则外键关系必须限制在单个数据库内。

错误:分配不兼容的模型

错误代码中遇到的问题源于尝试将“urls”数据库中的 LinkModel 实例分配给默认数据库中的 NewsModel 实例。由于这些模型属于不同的数据库,Django 会引发错误,阻止此分配。

解决方案:手动外键分配

要规避此限制,您可以实施自定义解决方法。不是直接通过 NewsModel 的链接字段分配 LinkModel 实例,而是手动设置数据库中的外键字段:

<code class="python">from django.db import connection

# Retrieve the LinkModel instance from the database
link = LinkModel.objects.using('urls').get(id=1)

# Execute a raw SQL query to update the foreign key value in the default database
with connection.cursor() as cursor:
    cursor.execute(
        "UPDATE news SET link_id = %s WHERE title = %s",
        [link.id, "test"]
    )</code>

这种方法手动更新默认数据库中的外键值,有效链接新闻项到所需的 LinkModel 实例。

以上是当遇到限制时,如何在 Django 中跨不同数据库实现外键?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn