如何根据Python中不同数据库的查询结果在一个DB中创建表

时间:2017-06-20 22:25:57

标签: python postgresql sqlalchemy psycopg2 cx-oracle

我正在使用两个独立的数据库(Oracle和PostgreSQL),其中大量的参考数据在Oracle中,我经常需要在对Postgres中存储的数据进行分析时参考(我无法控制这部分)。我希望能够直接将查询结果从Oracle传递到Postgres中的表(反之亦然)。我得到的最接近的是类似下面的代码使用Pandas作为介于两者之间,但它很慢。

import pandas as pd
import psycopg2
import cx_Oracle
import sqlalchemy

# CONNECT TO POSTGRES
db__PG = psycopg2.connect(dbname="username", user="password")
eng_PG = sqlalchemy.create_engine('postgresql://username:password@localhost:5432/db_one')

# CONNECT TO ORACLE
db__OR = cx_Oracle.connect('username', 'password', 'SID_Name')
eng_OR = sqlalchemy.create_engine('oracle+cx_oracle://username:password@10.1.2.3:4422/db_two')

#DEFINE QUERIES
query_A = "SELECT * FROM tbl_A"
query_B = "SELECT * FROM tbl_B"

# CREATE PANDAS DATAFRAMES FROM QUERY RESULTS
df_A = pd.read_sql_query(query_A, db__OR)
df_B = pd.read_sql_query(query_B, db__PG)

# CREATE TABLES FROM PANDAS DATAFRAMES
df_A.to_sql(name='tbl_a', con=eng_PG, if_exists='replace', index=False)
df_B.to_sql(name='tbl_b', con=eng_OR, if_exists='replace', index=False)

我认为必须有一种更有效,更直接的方法来实现这一点(比如用于在Oracle中的不同数据库之间移动数据的数据库链接),但我对Python很新,并且通常直接在SQL中工作或者以前在SAS。我一直在寻找直接从python游标结果或SQLAlchemy ResultProxy创建表的方法,但没有太多运气。

建议?

0 个答案:

没有答案