Python sql查询在列中插入数据

Python sql查询在列中插入数据,python,sql,Python,Sql,我不太熟悉SQL。我有一个超过100列的表格。将字典中的数据插入表的相应列(键名和列名相同)的最佳方法是什么 例如: 我的SQL表 第1列第2列第3列第4列第5列 我从字典中获得的数据: 第一数据集 第2列:苹果,第4列:树 第二数据集 第1栏:香蕉,第2栏:蓝色,第3栏:绿色,第4栏:房子,第5栏:红色 因此,如果字典的键与表的列名相同,则应插入数据。我知道如何对单个查询执行此操作,但如何(巧妙地)对大量查询执行此操作 谢谢 编辑: 我将在一个层面上做些什么以及一些澄清: 1) 创建一个包含所

我不太熟悉SQL。我有一个超过100列的表格。将字典中的数据插入表的相应列(键名和列名相同)的最佳方法是什么

例如:

我的SQL表

第1列第2列第3列第4列第5列

我从字典中获得的数据:

第一数据集

第2列:苹果,第4列:树

第二数据集

第1栏:香蕉,第2栏:蓝色,第3栏:绿色,第4栏:房子,第5栏:红色

因此,如果字典的键与表的列名相同,则应插入数据。我知道如何对单个查询执行此操作,但如何(巧妙地)对大量查询执行此操作

谢谢

编辑:

我将在一个层面上做些什么以及一些澄清:

1) 创建一个包含所有120列但没有任何数据的SQL表。 2) 我有大约500个word文件,其中包含一部分应该进入数据库的数据(120列中大约有5-10列)。 3) 所以我必须读取它们,解析它们,如果字典中的数据键与120个列名中的任何一个匹配,那么应该插入值。 3) 单模式:

if key == 'Column1':
sql=插入到第1列中 valuexy


对于500个文件和120列来说,这当然是非常愚蠢的。我希望这更清楚。

假设您有以下命令:

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)
对于值,使用已创建的字段列表执行类似操作。(如果您的词典是OrderedICT,则可以通过另一种方式完成此操作)

最后,您可以编写字符串

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)

假设您有以下命令:

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)
对于值,使用已创建的字段列表执行类似操作。(如果您的词典是OrderedICT,则可以通过另一种方式完成此操作)

最后,您可以编写字符串

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)

您可以使用
join()
map()
连接字典的键和值:


您可以使用
join()
map()
连接字典的键和值:


你能分享一下你要为一个查询做什么吗?这样人们就可以更容易地向你展示如何在许多查询中使用它。你能分享一下你在一个查询中需要做什么吗?这样,人们就可以更容易地向您展示如何将其应用于许多查询。这是一个糟糕的解决方案。没有人保证.keys()和.values()的顺序相同,因为字典没有顺序。此外,不建议使用map(),而应使用生成器。不,我错了。键和值以相同的顺序返回。好的!还有一个问题是,将其余部分保留为“空”(NULL)是一个好习惯吗?列=','。join(d.keys())就足够了@ikaros45:为什么地图“不推荐”?{}{}表示{0}{1},0,1表示第一个和第二个参数、列和值,因此。@snowflake
{}
用于替换为
format()
的参数。键和值以相同的顺序返回,
map
是一个内置函数,与其他函数一样有效。这可能不是更好的解决方案,但至少这些不是主要问题;)@koriander列表理解(不是生成器,抱歉)提供了比map()、reduce()更干净的语法,而不会弄乱lambda函数和更容易的嵌套等。它只是更像Python。这是一个糟糕的解决方案。没有人保证.keys()和.values()的顺序相同,因为字典没有顺序。此外,不建议使用map(),而应使用生成器。不,我错了。键和值以相同的顺序返回。好的!还有一个问题是,将其余部分保留为“空”(NULL)是一个好习惯吗?列=','。join(d.keys())就足够了@ikaros45:为什么地图“不推荐”?{}{}表示{0}{1},0,1表示第一个和第二个参数、列和值,因此。@snowflake
{}
用于替换为
format()
的参数。键和值以相同的顺序返回,
map
是一个内置函数,与其他函数一样有效。这可能不是更好的解决方案,但至少这些不是主要问题;)@koriander列表理解(不是生成器,对不起)提供了比map()、reduce()更干净的语法,而不会弄乱lambda函数和更容易的嵌套等。它更像Python。谢谢你的建议,你能告诉我错误在哪里吗?对不起,Rodas是对的。我想既然Dicts没有顺序,key()和value()可以以不同的顺序返回。但事实是,他们没有。我将编辑以使用这种方法,因为它更干净一点。map()无论如何都是“不推荐的”,您不能添加引号,因此除非您只插入数字,否则您的查询将崩溃。谢谢您的建议,您能告诉我错误在哪里吗?对不起,Rodas是对的。我想既然Dicts没有顺序,key()和value()可以以不同的顺序返回。但事实是,他们没有。我将编辑以使用这种方法,因为它更干净一点。map()无论如何都是“不推荐的”,并且