解析查询结果以将其插入另一个数据库

时间:2018-06-05 12:08:32

标签: python mysql sql

从MySQL数据库运行查询后,我得到以下结果:

(datetime.date(2000, 11, 11), u'superuser', datetime.date(2000, 11,11),u'yes')
(datetime.date(2001, 11, 11), u'superuser', datetime.date(2001, 11,11),u'yes')
(datetime.date(2002, 11, 11), u'superuser', datetime.date(2002, 11,11),u'yes')
(datetime.date(2003, 11, 11), u'superuser', datetime.date(2003, 11,11),u'yes')

这些结果来自数据库,它有四列:

last_login | is_superuser | data_joined | is_active

我的问题是我需要将这些数据插入到具有相同结构的另一个数据库中,但我需要以MySQL能够接受查询的方式解析数据:

 INSERT INTO  auth_user.auth_user (last_login, is_superuser, data_joined, 
 is_active) VALUES 
    ('2008-11-11', 'superuser', '2008-11-11', 'yes'),
    ('2008-11-11', 'superuser', '2008-11-11', 'yes'),
    ('2008-11-11', 'superuser', '2008-11-11', 'yes'),
    ('2008-11-11', 'superuser', '2008-11-11', 'yes')[...];

我正在努力从前一个获得这种格式,有没有人有任何建议如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

使用executemany()和参数化查询。鉴于前一个查询的结果存储为名为results的元组列表:

query = """INSERT INTO  auth_user.auth_user
           (last_login, is_superuser, data_joined, is_active)
           VALUES (%s, %s, %s, %s)"""

# If your driver's cursors don't work as context managers, wrap with
# contextlib.closing
with conn.cursor() as cursor:
    cursor.executemany(query, results)

conn.commit()

在使用参数化查询时,您的驱动程序知道如何传递常用的Python对象,例如datedatetime,字符串和数字。

根据使用的驱动程序executemany()可能会也可能不会优化传递多个值元组。例如,MySQL ConnectorPyMySQL优化INSERT语句。

答案 1 :(得分:1)

您的结果是元组...只生成一个合适的SQL查询,execute()它:

query = 'INSERT INTO auth_user.auth_user'                       \
          ' (last_login, is_superuser, data_joined, is_active)' \
          ' VALUES (%s, %s, %s, %s);'

for result in results:
    cursor.execute(query, result)