【问题标题】:MySQL MERGE table across separate databases using python使用python跨不同数据库的MySQL MERGE表
【发布时间】:2016-04-21 05:53:02
【问题描述】:

我有一个数据库 db1,其中包含表 tbl1、tbl2 和 tbl3。

我还有一个空数据库 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)

【问题讨论】:

    标签: python mysql


    【解决方案1】:

    如果您在程序末尾添加此语句:

    cnx1.commit()
    

    您将提交更改到数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-25
      • 2012-07-15
      • 2013-03-16
      • 2013-02-19
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      • 2011-08-15
      相关资源
      最近更新 更多