2016-04-21 79 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() 

您将您的更改提交到数据库。