Python MySQLdb:是否可以在不解析的情况下插入游标对象?

时间:2018-09-13 18:41:58

标签: python mysql mysql-python

我需要每天从源数据库加载到新数据库。

新的数据库表列与源表选择语句的结构相同。新的数据库表位于单独的数据库中,因此每个数据库连接的游标对象都是唯一的,我不能只是执行select into查询。

例如,如果我在某个源数据库中的某个表上进行选择:

# Assuming we already connected to the db and have a cursor object... 
sql_query = "SELECT val_bin, val_id, val_sel from table"
cursor.execute(sql_query)

现在,选择中的cursor对象中有我需要的对象。

然后插入,通常我只是获取每个值并对每个值执行插入语句。例如:

for row in cursor.fetchall():
    insert_query = "insert into new_table (val_bin, val_id, val_sel) VAULES (%s, %d, %s) % row[0], row[1], row[2]"
    destination_cursor.execute(insert_query)
    destination_db.commit()

但是,这似乎很乏味且缓慢地遍历所有内容。 是否有办法将select语句中返回的整个游标对象插入到新的db表中??目标表模式与select中返回的内容完全匹配。

如果不可能的话,那很好,我只是想使其更容易,更有效。

1 个答案:

答案 0 :(得分:0)

如果目标是将给定游标的所有结果插入表中,则可能要使用.executemany而不是.execute。以下是说明:

cursor = connection.cursor()
destination_cursor = connection.cursor()
sql_query = "SELECT val_bin, val_id, val_sel from table"
cursor.execute(sql_query)
insert_query = "insert into new_table (val_bin, val_id, val_sel) VALUES (%s, %s, %s)"
destination_cursor.executemany(insert_query, cursor)
destination_db.commit()

我希望这证明是有用的。