我需要每天从源数据库加载到新数据库。
新的数据库表列与源表选择语句的结构相同。新的数据库表位于单独的数据库中,因此每个数据库连接的游标对象都是唯一的,我不能只是执行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中返回的内容完全匹配。
如果不可能的话,那很好,我只是想使其更容易,更有效。
答案 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()
我希望这证明是有用的。