挑战: 使用 Python 在驻留在不同服务器上的两个 MySQL 数据库之间执行数据库联接MySQLDB。
解决方案:
要建立与两个数据库的连接,请使用单独的连接参数为每个服务器创建 MySQLDB 连接。但是,后续的 join 操作无法直接使用 MySQLDB 进行,因为它缺乏跨服务器 join 功能。
替代方法:
FEDERATED Storage Engine:
MySQL 提供了 FEDERATED 存储引擎,允许您像访问本地数据库一样访问远程数据库中的表。使用以下语法创建联合表:
CREATE FEDERATED TABLE remote_table ( column_1 data_type, column_2 data_type, ... ) ENGINE=FEDERATED CONNECTION='mysql://username:password@server2/database_B';
链接服务器解决方法:
如果使用 MySQL 不可行,您可以使用另一个支持链接的 DBMS服务器,例如 Microsoft SQL Server。在这里,您可以创建一个链接服务器从数据库 B 连接到数据库 A,并使用中间件 DBMS 中的查询执行连接。
Python 中的实现:
取决于根据您选择的方法:
联邦引擎:
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
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
""")
结果=cursor_external.fetchall()
以上是如何使用 MySQL 从 Python 执行远程服务器上的数据库间连接?的详细内容。更多信息请关注PHP中文网其他相关文章!