Im new to python, trying to write a generic function that has arguments as the list of dictionaries, tablename, dbusername, password and Insert different data in to different tables like below
dict_list=[{'name': 'sandeep', 'age': '10'}, {'name': 'sa', 'age': '0'}] another_dict_list=[{'area': 'AP', 'pin': '00'}, {'area': 'UP', 'pin': '01'}]
def func(listofdict, tablename, dbusername, dbpassword):
#all connection and cursor code here#
query = """insert into tablename (dict keys) values(dict values)"""
cursor.executemany(query, listofdict)
now ill call the above funtion
func(dict_list, nametable, dbuser, dbpassword)
func(another_dict_list ,areatable, dbuser, dbpassword)
Wanted to know if we can write a generic code for insertion of data using execute many
Assuming that the list of dictionaries contain at least one entry and each entry has the same keys, you can do the following:
def func(table_name, args):
names = list(args[0].keys())
column_names = ",".join(names)
bv_names = ",".join(":" + n for n in names)
sql = f"insert into {table_name} ({column_names}) values ({bv_names})"
cursor.executemany(sql, args)
The first line assumes that there is at least one entry in args and that it is a dictionary and that all subsequent entries are also dictionaries with the same keys. If any of those assumptions are incorrect the function will fail.
The next few lines build up the SQL that you want to execute with the bind variables.