Скажем, у вас есть список имен полей (вероятно, вы можете получить это из заголовка вашего CSV-файла):
fieldnames = ['Name', 'Address', 'City', 'State']
Предполагая, что они все VARCHAR, вы можете создать таблицу "TableName":
sql_table = 'CREATE TABLE TableName (%s)' % ','.join('%s VARCHAR(50)' % name for name in fieldnames)
cursor.execute(sql_table)
Вы можете вставить строки из словаря "dict":
sql_insert = ('INSERT INTO TableName (%s) VALUES (%s)' %
(','.join('%s' % name for name in fieldnames),
','.join('%%(%s)s' % name for name in fieldnames)))
cursor.execute(sql_insert, dict)
Или сделать это за один раз, учитывая список словарей:
dictlist = [dict1, dict2, ...]
cursor.executemany(sql_insert, dictlist)
Вы можете адаптировать это по мере необходимости в зависимости от типа ваших полей и использования DictReader.