У меня есть месячные данные о погоде, которые я хочу вставить в таблицу базы данных Oracle, но я хочу вставить соответствующие записи в пакет, чтобы быть более эффективными. Может ли кто-нибудь посоветовать, как я буду делать это в Python?
Например, скажем, моя таблица имеет четыре поля: идентификатор станции, дату и два поля значений. Записи однозначно идентифицируются по идентификаторам станции и по дате (составному ключу). Значения, которые мне нужно будет вставлять для каждой станции, будут храниться в списке с Х-числом полной стоимости лет, поэтому, например, если есть два года значений, то списки значений будут содержать 24 значения.
Я предполагаю, что ниже я буду делать это, если захочу вставить записи по одному:
connection_string = "scott/[email protected]"
connection = cx_Oracle.Connection(connection_string)
cursor = cx_Oracle.Cursor(connection)
station_id = 'STATION_1'
start_year = 2000
temps = [ 1, 3, 5, 7, 9, 1, 3, 5, 7, 9, 1, 3 ]
precips = [ 2, 4, 6, 8, 2, 4, 6, 8, 2, 4, 6, 8 ]
number_of_years = len(temps) / 12
for i in range(number_of_years):
for j in range(12):
# make a date for the first day of the month
date_value = datetime.date(start_year + i, j + 1, 1)
index = (i * 12) + j
sql_insert = 'insert into my_table (id, date_column, temp, precip) values (%s, %s, %s, %s)', (station_id, date_value, temps[index], precips[index]))
cursor.execute(sql_insert)
connection.commit()
Есть ли способ сделать то, что я делаю выше, но таким образом, что выполняет пакетную вставку для повышения эффективности? Кстати, мой опыт связан с Java/JDBC/Hibernate, поэтому, если кто-то может дать объяснение/пример, который сравнивается с подходом Java, тогда это было бы особенно полезно.
EDIT: Возможно, мне нужно использовать cursor.executemany(), как описано здесь?
Заранее благодарим за любые предложения, комментарии и т.д.