Python MySQLdb: возможно ли вставить объект курсора без его анализа?

0

Мне нужно сделать ежедневную загрузку из источника 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? Схема таблицы назначения точно соответствует тому, что было возвращено из выбранного.

Если это невозможно, то я просто стараюсь сделать это проще и эффективнее.

  • 0
    Вы пробовали 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() ?
Теги:
mysql-python

1 ответ

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()

Надеюсь, это окажется полезным.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню