Maison > base de données > tutoriel mysql > Comment implémenter des clés étrangères dans différentes bases de données dans Django lorsque je suis confronté à des limitations ?

Comment implémenter des clés étrangères dans différentes bases de données dans Django lorsque je suis confronté à des limitations ?

Mary-Kate Olsen
Libérer: 2024-10-29 15:03:02
original
994 Les gens l'ont consulté

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

Comment implémenter des clés étrangères dans différentes bases de données dans Django

Dans Django, l'utilisation de clés étrangères est cruciale pour établir des relations entre les objets stockés sur plusieurs bases de données. Cependant, ce processus peut présenter un défi lorsque des modèles pour différentes bases de données sont impliqués.

Comprendre les limitations des clés étrangères entre bases de données

Django interdit actuellement les relations de clés étrangères entre modèles résidant dans des bases de données distinctes. Cette restriction provient de l'absence de prise en charge des relations entre bases de données. Si vous utilisez un routeur de base de données pour partitionner les modèles, les relations de clé étrangère doivent être limitées au sein d'une seule base de données.

L'erreur : attribution de modèles incompatibles

L'erreur rencontré dans votre code provient de la tentative d'attribuer une instance LinkModel de la base de données "urls" à une instance NewsModel de la base de données par défaut. Étant donné que ces modèles appartiennent à des bases de données différentes, Django génère une erreur empêchant cette affectation.

La solution : attribution manuelle de clés étrangères

Pour contourner cette limitation, vous pouvez implémentez une solution de contournement personnalisée. Au lieu d'attribuer l'instance LinkModel directement via le champ de lien du NewsModel, définissez manuellement le champ de clé étrangère dans la base de données :

<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>
Copier après la connexion

Cette approche met à jour manuellement la valeur de la clé étrangère dans la base de données par défaut, liant efficacement l'élément d'actualité. à l'instance LinkModel souhaitée.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal