Python sql查询在列中插入数据

时间:2013-03-28 15:00:34

标签: python sql

我对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列,这当然是非常愚蠢的。我希望这更清楚。

2 个答案:

答案 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))