2016-04-10 3 views
0

У меня есть код следующим образом:данные вставки в POSTGRESQL из MySQL

import pg 
import MySQLdb 
db_postgre = pg.connect(dbname=...,user=...,passwd=...,host=.., port=...) 
db_mysql=MySQLdb.Connect(user=...,passwd=...,db=..., host=...) 
cur = db_mysql.cursor(MySQLdb.cursors.DictCursor) 
cur.execute ("""SELECT X,Y,Z FROM tab_a""") 
data = crs.fetchall() 
for row in data : 
    #INSERT THE ROW (X,Y,Z) TO POSTGRESQL TABLE. 

таблица в PostgreSQL (post_tab_a) идентична той, в MySQL. значение также имеет X,Y,Z все типы: TEXT.

Возможно ли выполнить вставку непосредственно с cur? Каков самый простой способ сделать эту вставку?

+0

Так что вы читаете данные из одного источника, введите петлю и вставить строку за строкой в ​​другую БД? Это будет плохой работой. – lad2025

+0

@ lad2025 Цикл не является обязательным. Я просто хочу прочитать из одного источника и ввести другое. Мне нужно что-то, чтобы имитировать этот запрос 'insert в post_tab_a (x, y, z), выберите x, y, z из tab_a'. Проблема заключается в том, что post_tab_a находится в postgresql, а tab_a находится в MYSql – java

+0

. Проверьте: [Есть быстрый метод для экспорта большой таблицы из mysql в postgresql?] (Http://serverfault.com/questions/253876/is-there- a-fast-method-for-exporting-a-large-table-from-mysql-to-postgresql) – lad2025

ответ

1

Просто откройте еще один курсор для Postgre для итеративных вставок. Там не будет никакого имя путаницы в таблицах соответствуют их объектам курсора/подключения:

import pg 
import MySQLdb 

# DB CONNECTIONS 
db_postgre = pg.connect(dbname=...,user=...,passwd=...,host=.., port=...) 
db_mysql = MySQLdb.Connect(user=...,passwd=...,db=..., host=...) 

# CURSORS 
mycur = db_mysql.cursor() 
postcur = db_postgre.cursor() 

mycur.execute("SELECT X,Y,Z FROM tab_a") 

for row in mycur.fetchall(): 
    postcur.execute("INSERT INTO tab_a (X,Y,Z) VALUES (%s, %s, %s)", \ 
        (row['X'], row['Y'], row['Z'])) 
    db_postgre.commit() 

# CLOSE CURSORS 
postcur.close() 
mycur.close() 

# CLOSE CONNECTIONS 
db_postgre.close() 
db_mysql.close() 
Смежные вопросы