如何使用sqlalchemy表达式语言/ sqlalchemy核心联接来自两个不同数据库的表?

Indhuja ravi

我正在使用MySql。但是我能够找到使用sqlalchemy orm而不是使用表达式语言来实现此目的的方法,因此我特别在寻找基于核心/表达式语言的解决方案。数据库位于同一服务器上

这是我的连接的样子:

connection = engine.connect().execution_options(
schema_translate_map = {current_database_schema: new_database_schema})
engine_1=create_engine("mysql+mysqldb://root:user@*******/DB_1")
engine_2=create_engine("mysql+mysqldb://root:user@*******/DB_2",pool_size=5)

metadata_1=MetaData(engine_1)
metadata_2=MetaData(engine_2)

metadata.reflect(bind=engine_1)
metadata.reflect(bind=engine_2)

table_1=metadata_1.tables['table_1']
table_2=metadata_2.tables['table_2']
query=select([table_1.c.name,table_2.c.name]).select_from(join(table_2,table_1.c.id==table_2.c.id,'left')

result=connection.execute(query).fetchall()

但是,当我尝试从不同数据库联接表时,显然会引发错误,因为该连接属于数据库之一。而且我没有尝试过其他任何方法,因为我找不到解决该问题的方法。提出问题的另一种方式(也许)是“如何使用sqlalchemy core中的单个连接来连接到多个数据库”。

IljaEverilä

仅将此处的解决方案应用于Core,您可以创建Engine连接到服务器的单个对象,但无需默认使用一个数据库或另一个数据库:

engine = create_engine("mysql+mysqldb://root:user@*******/")

然后使用单个MetaData实例反映每个架构的内容:

metadata = MetaData(engine)
metadata.reflect(schema='DB_1')
metadata.reflect(schema='DB_2')

# Note: use the fully qualified names as keys
table_1 = metadata.tables['DB_1.table_1']
table_2 = metadata.tables['DB_2.table_2']

您也可以使用其中一个数据库作为“默认”,并将其传递到URL中。在这种情况下,您将照常反映该数据库中的表,并且schema=仅在反映另一个数据库时才传递关键字参数。

使用创建的引擎执行查询:

query = select([table_1.c.name, table_2.c.name]).\
    select_from(outerjoin(table1, table_2, table_1.c.id == table_2.c.id))

with engine.begin() as connection:
    result = connection.execute(query).fetchall()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用PostgreSQL连接来自不同数据库的两个表?

如何在SQLAlchemy中连接来自不同数据库的2个表?

如何连接来自两个不同数据库(ms.access和mysql)的三个表?

如何在 sqlalchemy 表达式语言中使用 jsonb 与选择表达式中的整数进行比较?

flask-sqlalchemy:无法连接来自两个数据库的表(不同的绑定键)。收到错误1146(请参阅下文)

如何在SQLAlchemy的SQL表达式语言上使用JSON_OBJECTAGG编写MySQL查询?

SQLAlchemy表达式语言:如何将表与子查询联接?

使用sqlalchemy加入两个不同的数据库

如何连接来自两个不同数据库的两个表并使用 C#/ASP 从 MSSQL 检索数据。如何为此管理连接字符串?

如何合并来自两个不同数据库的不同表?

使用结构不同的MySql同步来自两个不同数据库的两个表

如何用不等号连接来自不同数据库的 2 个表

如何连接来自mysql中两个不同表的数据(LEFT JOIN)?

使用FK连接来自两个表的数据

SQLAlchemy表达式语言和SQLite的删除级联

如何在SQL Server中联接来自多个数据库的重复表

如何将来自两个不同数据库的事实合并到Datawarehouse的事实表中?

SQL Merge 连接来自两个不同数据库的两个表

如何连接来自两个不同PDO对象的表?

如何使用Dask在read_sql_table中使用sqlalchemy表达式?

使用.Net Core 2.1 / EF Core在两个单独的数据库中联接表

如何连接来自两个不同数据帧的*具有给定条件*的行组合?

使用 SQLAlchemy,如何按关联对象属性和正则表达式过滤?

如何在sqlalchemy hybird表达式中运行查询?

SQLAlchemy-如何取反ANY表达式

如何从SQLAlchemy表达式获取原始的编译SQL查询?

连接SQLAlchemy ORM与来自sql核心表达式的对象?

在SQLAlchemy的'CheckConstraint'中使用正则表达式

使用Laravel Eloquent在同一服务器上的不同数据库中联接两个MySQL表