Heim >Datenbank >MySQL-Tutorial >Wie führe ich datenbankübergreifende Verknüpfungen auf Remote-Servern von Python aus mit MySQL durch?
Herausforderung: Führen Sie Datenbank-Joins zwischen zwei MySQL-Datenbanken durch, die sich auf verschiedenen Servern mit Python befinden MySQLDB.
Lösung:
Um Verbindungen zu den beiden Datenbanken herzustellen, erstellen Sie MySQLDB-Verbindungen für jeden Server mit separaten Verbindungsparametern. Der anschließende Join-Vorgang kann jedoch nicht direkt mit MySQLDB durchgeführt werden, da ihm die serverübergreifende Join-Funktionalität fehlt.
Alternative Ansätze:
FEDERATED Storage Engine:
MySQL bietet die FEDERATED-Speicher-Engine, mit der Sie auf Tabellen aus entfernten Datenbanken zugreifen können, als wären diese lokal. Verwenden Sie die folgende Syntax, um eine Verbundtabelle zu erstellen:
CREATE FEDERATED TABLE remote_table ( column_1 data_type, column_2 data_type, ... ) ENGINE=FEDERATED CONNECTION='mysql://username:password@server2/database_B';
Problemumgehung für Verbindungsserver:
Wenn die Verwendung von MySQL nicht möglich ist, können Sie ein anderes DBMS verwenden, das Verknüpfungen unterstützt Server wie Microsoft SQL Server. Hier können Sie einen Verbindungsserver erstellen, um von Datenbank B aus eine Verbindung zu Datenbank A herzustellen und die Verknüpfung mithilfe von Abfragen innerhalb des Middleware-DBMS durchzuführen.
Implementierung in Python:
Abhängig zu Ihrem gewählten Ansatz:
FEDERATED Engine:
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:**
pymssql importieren
conn_external = pymssql.connect(...)
cursor_external.execute("""
SELECT *
FROM LinkedIned_server_A.database_A.dbo.local_table
INNER JOIN LinkedIned_server_B.database_B.dbo.remote_table
ON Linked_server_A.database_A. dbo.local_table.id = LinkedIn_Server_B.Database_B.DBO.Remote_Table.id
Das obige ist der detaillierte Inhalt vonWie führe ich datenbankübergreifende Verknüpfungen auf Remote-Servern von Python aus mit MySQL durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!