Comment puis-je insérer un lot dans une base de données Oracle à l'aide de Python?

J'ai quelques mensuelle des données météorologiques que je veux insérer dans une table de base de données Oracle, mais je veux insérer des enregistrements correspondants dans un lot, afin d'être plus efficace. Quelqu'un peut-il nous conseiller quant à la façon dont j'allais le faire en Python?

Par exemple, disons que mon tableau comporte quatre champs: ID de la station, une date, et deux champs de valeur. Les enregistrements sont identifiés de façon unique par l'ID de la station et des champs de date (clé composite). Les valeurs que je vais avoir à insérer pour chaque station sera conservé dans une liste avec un nombre X d'années complètes de données, si par exemple il y a deux ans, de valeurs, la valeur des listes contiennent des 24 valeurs.

Je suppose que ci-dessous est la façon dont je le ferais si je voulais insérer les enregistrements un à un:

connection_string = "scott/tiger@testdb"
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()

Est-il un moyen de faire ce que je fais ci-dessus, mais d'une manière qui effectue une insertion de lot afin d'augmenter l'efficacité? BTW mon expérience avec Java/JDBC/Hibernate donc si quelqu'un peut donner une explication/exemple de ce qui se compare à la Java approche alors qu'il serait particulièrement utile.

EDIT: j'ai peut-être besoin d'utiliser le curseur.executemany() comme décrit ici?

Merci d'avance pour toutes les suggestions, commentaires, etc.

source d'informationauteur James Adams