Maison >base de données >tutoriel mysql >Comment effectuer des jointures inter-bases de données sur des serveurs distants à partir de Python à l'aide de MySQL ?
Défi : Effectuer des jointures de bases de données entre deux bases de données MySQL résidant sur des serveurs différents à l'aide de Python MySQLDB.
Solution :
Pour établir des connexions aux deux bases de données, créez des connexions MySQLDB pour chaque serveur en utilisant des paramètres de connexion distincts. Cependant, l'opération de jointure ultérieure ne peut pas être effectuée directement à l'aide de MySQLDB car elle ne dispose pas de fonctionnalités de jointure inter-serveurs.
Approches alternatives :
Moteur de stockage FÉDÉRÉ :
MySQL propose le moteur de stockage FEDERATED, vous permettant d'accéder aux tables de bases de données distantes comme si elles étaient locales. Utilisez la syntaxe suivante pour créer une table fédérée :
CREATE FEDERATED TABLE remote_table ( column_1 data_type, column_2 data_type, ... ) ENGINE=FEDERATED CONNECTION='mysql://username:password@server2/database_B';
Solution de contournement des serveurs liés :
Si l'utilisation de MySQL n'est pas réalisable, vous pouvez utiliser un autre SGBD prenant en charge les serveurs, tels que Microsoft SQL Server. Ici, vous pouvez créer un serveur lié pour vous connecter à la base de données A à partir de la base de données B et effectuer la jointure à l'aide de requêtes dans le SGBD middleware.
Implémentation en Python :
En fonction sur l'approche choisie :
FÉDÉRÉ Moteur :
import MySQLdb # Create a connection to the local database conn_local = MySQLdb.connect(...) # Create a cursor for the local connection cursor_local = conn_local.cursor() # Execute a query to join the local table with the remote table cursor_local.execute(""" SELECT * FROM local_table INNER JOIN remote_table ON local_table.id = remote_table.id """) result = cursor_local.fetchall() **Linked Servers Workaround:**
import pymssql
conn_external = pymssql.connect(...)
cursor_external.execute("""
SELECT *
FROM linked_server_A.database_A.dbo.local_table
INNER JOIN linked_server_B.database_B.dbo.remote_table
ON linked_server_A.database_A. dbo.local_table.id = linked_server_B.database_B.dbo.remote_table.id
""")
result = curseur_external.fetchall()
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!