我对SQL不太熟悉。我有一个超过100列的表。将数据从字典插入到表格的相应列中的最佳方法是什么(键名和列名相同)?
示例:
我的SQL表
Column1 Column2 Column3 Column4 Column5
我从字典中获取的数据:
第一个数据集
Column2:apple,Column4:tree
第二个数据集
Column1:banana,Column2:blue,Column3:green,Column4:house,Column5:red
因此,如果字典的键与表的列名相同,则应插入数据。我知道如何为单个查询执行此操作但是如何为大量查询执行此操作(聪明)?
谢谢!
编辑:
我会在一个层面上做些什么以及一些澄清:
1)创建一个包含所有120列但没有任何数据的SQL表。 2)我有大约500个word文件,其中包含应该进入数据库的部分数据(120列中约5-10个)。 3)所以我必须阅读它们,解析它们,如果字典中的数据键与120列名称中的任何一个匹配,则应插入该值。 3)单一模式:
if key == 'Column1':
sql = INSERT INTO Column1 valuexy
对于500个文件和120列,这当然是非常愚蠢的。我希望这更清楚。
答案 0 :(得分:3)
假设您有以下词典:
query_data = {
'col1': 56,
'col2': 100,
'col3': 'lol'
}
您的SQL查询可以构造如下:
sql = 'INSERT INTO table_name ({fields}) VALUES ({values})'
现在你必须构建字段字符串
fields = query_data.keys()
fields_string = ', '.join(fields)
并使用已创建的字段列表为您执行类似操作的值。 (如果你的字典是OrderedDict,这可以用另一种方式完成。)
values_string = ', '.join(['"{0}"'.format(query_data[key]) for key in fields])
最后你可以撰写字符串。
composed_sql = sql.format(fields=fields_string, values=values_string)
这是一种非常粗略的方法,但如果您不熟悉此主题,则可以理解。大多数框架允许使用更精细的方法来实现这一目标。特别是关于SQL注入。
打印,玩耍,理解概念,随着时间的推移你可能会采用其他方式。
编辑
更简洁的方法是:
sql = 'INSERT INTO table_name ({fields}) VALUES ({values})'
fields = ', '.join(query_data.keys())
values = ', '.join(['"{0}"'.format(value) for value in query_data.values()])
composed_sql = sql.format(fields=fields, values=values)
答案 1 :(得分:2)
您可以使用join()
和map()
连接字典的键和值:
d = {'Column1':'banana', 'Column2':'blue', 'Column3':'green', 'Column4':'house', 'Column5':'red'}
columns = ', '.join(map(str, d.keys()))
values = ', '.join(map(repr, d.values()))
cursor.execute("INSER INTO table ({}) VALUES ({})".format(columns, values))