首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用python跨不同数据库的MySQL合并表

使用python跨不同数据库的MySQL合并表
EN

Stack Overflow用户
提问于 2016-04-21 05:53:02
回答 1查看 692关注 0票数 0

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

我还有一个空的数据库db2。

如何创建合并表mrg1,它从数据库db1合并tbl1、tbl2和tbl3的内容,但使用python/mysql连接器存储在数据库db2中?

这个问题与wroberts question相同,但使用python。

这是我尝试过的:

代码语言:javascript
复制
    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查看时,没有发生任何更改。

代码语言:javascript
复制
    ('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查看:

代码语言:javascript
复制
    mysql> use testaa;
    Database changed
    mysql> select count(*) from resa;
    +----------+
    | count(*) |
    +----------+
    |        3 |
    +----------+
    1 row in set (0.00 sec)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-21 07:46:07

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

代码语言:javascript
复制
cnx1.commit()

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36760732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档