Мне нужно сделать ежедневную загрузку из источника db в новый db.
Новые столбцы таблицы db идентичны структуре с оператором выбора исходной таблицы. Новая таблица db находится в отдельном db, поэтому объект курсора является уникальным для каждого соединения db, и я не могу просто сделать select into
запросе.
Так, например, если я сделаю выбор в некоторой таблице в некотором источнике db:
# 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
.
Затем, чтобы вставить, обычно я просто хватаю каждое значение и делаю инструкцию insert для каждого. Например:
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? Схема таблицы назначения точно соответствует тому, что было возвращено из выбранного.
Если это невозможно, то я просто стараюсь сделать это проще и эффективнее.
Вы можете использовать .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()
Надеюсь, это окажется полезным.
insert_query = "insert into new_table (val_bin, val_id, val_sel) VAULES (%s, %s, %s)"; destination_cursor.executemany(insert_query, cursor); destination_db.commit()
?