2016-04-21 77 views
0

我有一個包含表tbl1,tbl2和tbl3的數據庫db1。使用python跨越單獨的數據庫的MySQL MERGE表格

我也有一個空的數據庫db2。

如何創建MERGE表mrg1,它將數據庫db1中的tbl1,tbl2和tbl3的內容合併,但使用python/mysql連接器存儲在數據庫db2中?

此問題與wroberts question相同,但使用python。

這是我已經試過:

import mysql.connector 

    db1 = 'testaa' 
    cnx1 = mysql.connector.connect(user='nev', password='***',host='127.0.0.1',database=db1) 
    cursor1 = cnx1.cursor() 

    db2 = 'vic' 
    cnx2 = mysql.connector.connect(user='nev', password='***',host='127.0.0.1',database=db2) 
    cursor2 = cnx2.cursor() 

    cnx = [cnx1,cnx2] 
    print ("cnx1",cnx1) 
    print ("cnx2",cnx2) 

    tables = ["RESA","TESTA"] 

    # count rows in each table 
    for db in cnx: 
     cursor = db.cursor() 
     for tab in tables: 
      query = ("SELECT count(*) FROM %s") % tab 
      cursor.execute(query) 
      for (count) in cursor: 
       print("{} {} {}".format(db,query,count)) 
    print ("") 


    # merge the tables from vic into testaa 
    for tab in tables: 
     query = ('insert into {}.{} (select * from {}.{})'.format(db1,tab,db2,tab)) 
     cursor1.execute(query) 

    # run count again to check results 
    for db in cnx: 
     cursor = db.cursor() 
     for tab in tables: 
      query = ("SELECT count(*) FROM %s") % tab 
      cursor.execute(query) 
      for (count) in cursor: 
       print("{} {} {}".format(db,query,count)) 
    print ("") 

結果表明成功,表計雙,但是當我從MySQL視圖沒有發生變化。上述運行後

('cnx1', <mysql.connector.connection.MySQLConnection object at 0x100f9dd90>) 
    ('cnx2', <mysql.connector.connection.MySQLConnection object at 0x100fad310>) 
    <mysql.connector.connection.MySQLConnection object at 0x100f9dd90> SELECT count(*) FROM RESA (3,) 
    <mysql.connector.connection.MySQLConnection object at 0x100f9dd90> SELECT count(*) FROM TESTA (19,) 

    <mysql.connector.connection.MySQLConnection object at 0x100fad310> SELECT count(*) FROM RESA (3,) 
    <mysql.connector.connection.MySQLConnection object at 0x100fad310> SELECT count(*) FROM TESTA (19,) 

    <mysql.connector.connection.MySQLConnection object at 0x100f9dd90> SELECT count(*) FROM RESA (6,) 
    <mysql.connector.connection.MySQLConnection object at 0x100f9dd90> SELECT count(*) FROM TESTA (38,) 

    <mysql.connector.connection.MySQLConnection object at 0x100fad310> SELECT count(*) FROM RESA (3,) 
    <mysql.connector.connection.MySQLConnection object at 0x100fad310> SELECT count(*) FROM TESTA (19,) 

查看從MySQL:

mysql> use testaa; 
    Database changed 
    mysql> select count(*) from resa; 
    +----------+ 
    | count(*) | 
    +----------+ 
    |  3 | 
    +----------+ 
    1 row in set (0.00 sec) 

回答

1

,如果你在你的程序的末尾添加以下語句:

cnx1.commit() 

您將您的更改提交到數據庫。