Using a Python dict for a SQL INSERT statement

前端 未结 10 1294
小蘑菇
小蘑菇 2020-11-28 22:43

I am trying to use a dict to do a SQL INSERT. The logic would basically be:

INSERT INTO table (dict.keys()) VALUES dict.values()
         


        
10条回答
  •  春和景丽
    2020-11-28 22:58

    I'm a little late to the party but there is another way that I tend to prefer since my data is usually in the form of a dict already. If you list the bind variables in the form of %(columnName)s you can use a dictionary to bind them at execute. This partially solves the problem of column ordering since the variables are bound in by name. I say partially because you still have to make sure that the columns & values portion of the insert are mapped correctly; but the dictionary itself can be in any order (since dicts are sort of unordered anyway)

    There is probably a more pythonic way to achieve all this, but pulling the column names into a list and working off it ensures we have a static ordering to build the columns & values clauses.

    data_dict = {'col1': 'value 1', 'col2': 'value 2', 'col3': 'value 3'}
    columns = data_dict.keys()
    cols_comma_separated = ', '.join(columns)
    binds_comma_separated = ', '.join(['%(' + item + ')s' for item in columns])
    
    sql = f'INSERT INTO yourtable ({cols_comma_separated}) VALUES ({binds_comma_separated})'
    
    cur.execute(sql, data_dict)
    

    Now whether or not it is a good idea to dynamically build your columns & values clause like this is a topic for a SQL injection thread.

提交回复
热议问题