[cx-oracle-users] Varying field names and corresponding columns in the Oracle DB
Brought to you by:
atuining
|
From: Derry H. <con...@de...> - 2017-03-09 15:17:38
|
Hi there,
I'm trying to parse data with variable fields and am looking for a more
pythonic, efficient way to do this.
Firstly I have a dict like so:
smsreport_dict = dict: {'date': '2007-05-27 14:00:12 +0200', 'msgid':
'2D67C865FB6FA25A9261C75E8D2F0F2B ', 'msgparts': '1', 'result': 'success'}
This is compiled from an xml file, and the fields are not always the same in
each xml file, however there are a maximum number of fields (and so field names)
that the xml file can be. Consequently the Oracle DB has about 12 or so columns.
I see two possible ways to execute the command, as follows:
database_table_name = 'messaging'
for field_name, input in smsreport_dict.items():
sql_insert = 'insert into ' + database_table_name + ' {0} values
{1}'.format(field_name, input)
cursor.execute(sql_insert)
connection.commit()
cursor.close()
connection.close()
# OR...
sql_insert = 'insert into ' + database_table_name + ' (a, b, c, d)
values (:1, :2, :3, :4)'
cursor.prepare(sql_insert)
cursor.executemany(None, smsreport_dict)
connection.commit()
cursor.close()
connection.close()
However if the field names are different depending on the xml file (therefore so
too can the number of fields/columns) then how can I accomodate for this
variation? I'm thinking it may be best to loop through "smsreport_dict" and
match each field name i.e date, msgid etc.
with the corresponding field/column name, that is already established in my
Oracle DB. Any ideas?
Regards,
Derry.
|