在 cx_Oracle 中处理多个游标

Dealing with multiple cursors in cx_Oracle

虽然我的任务相对简单:从架构 A 中的一个 table 中获取数据,然后插入到架构 B 中的另一个 table 中,但我仍然不知道如何在 cx_Oracle.

在 PL/SQL 中,我会按照以下方式做一些事情:

插入 Schema_B.Table ... 来自 Schema_A.Table.

但是,在 cx_Oracle 中,每个连接都有一个单独的游标,并且不知道如何在一个 SQL 语句中连接到两个模式。如果需要可以附上我的代码。

本质上,我有这样的东西:

connect_db_1 = cx_Oracle_database.connect(db 1 credentials)
connect_db_2 = cx_Oracle_database.connect(db 2 credentials)

schema 1 =...
schema 2=...

cursor_db_1 = connect_db_1.cursor()
cursor_db_2 = connect_db_2.cursor()

#sample statement that works on one database
cursor_db_1.execute(F'select * from {schema_1}.table.a)

但是,如果我需要从一个数据库中 select 一些东西,然后用一个语句将它放入另一个数据库,我不知道该怎么做,因为它需要使用两个游标

cursor_db_1.execute(F'insert into {schema_2}.table_1
                    SELECT * from {schema_1}.table.a )

这不起作用,因为有一个模式不在此游标中

您是要插入另一个数据库,还是同一数据库中的另一个用户?

如果是另一个数据库,则必须连接到两个数据库:在 cx_Oracle 中有两个连接,或者在插入时使用 DB link. If you use cx_Oracle with two connections, then tune arraysize when querying, and use executemany() 从一个数据库到另一个数据库。

如果您的用户在同一个数据库中,那么您可以使用 GRANT 为写入用户授予适当的权限,以便它可以读取其他用户的 table。