我正在Python中使用Psycopg2,以便将数据插入PostgreSQL摘要表。我要插入的数据是从数百个CSV文件中获取的数据。我知道如何获取所需的数据,并且我已经有执行此操作的代码。问题是,在某些CSV文件中,某些值不存在。
例如: 文件#1:
XBT:1
ABC:2
ABD:3
...
...
文件#2:
ABC:4
ABD:5
...
...
在这种情况下,我正在使用字典,以便稍后将数据插入表中。 所以首先我有一个创建字典的函数。在这种情况下,第一个字典将如下所示:
{'XBT':1,'ABC':2,'ABD':3}
第二个看起来像这样:
{'ABC':4,'ABD':5}
问题将出在INSERT INTO命令上。我有一个将数据插入表中的函数,如下所示:
INSERT INTO
summary(XBT,ABC,ABD)
VALUES (%s, %s, %s)
当循环尝试遍历第二个文件时,我将得到一个错误,因为字典将没有'XBT'值。 我正在寻找的解决方案是,如果字典缺少值,则INSERT INTO函数仍会向表中添加新行,而该行将没有缺少值。无法为每种情况创建INSERT INTO函数,因为有超过100个变量。
答案 0 :(得分:1)
简单的解决方案是将字典中的键也转换为%s
,并在构建过程中构建字符串并构建相应的数组。然后,您可以组合所有内容并执行该语句。
key_str = ''
val_string = ''
key_arr = []
val_arr = []
for key, value in your_dict.iteritems():
key_str += "%s,"
val_str += "%s,"
key_arr.append(key)
val_arr.append(value)
# Then do some string manipulation
command = "INSERT INTO summary({keys}) VALUES ({values})".format(keys=key_str[:1], values = val_str[:1])
# and combine your arrays
substitutions = key_arr + val_arr
# Then execute the command
cursor.execute(command, substitutions)
# Continue with whatever you were going for.