Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果我没有';我没有所有的价值观_Python_Sql_Postgresql_Psycopg2 - Fatal编程技术网

Python 如果我没有';我没有所有的价值观

Python 如果我没有';我没有所有的价值观,python,sql,postgresql,psycopg2,Python,Sql,Postgresql,Psycopg2,我在Python中使用Psycopg2,以便将数据插入到PostgreSQL摘要表中。我试图插入的数据是从数百个CSV文件中获取的数据。我知道如何获取我需要的数据,而且我已经有了这样做的代码。问题是,在某些CSV文件中,某些值不存在 例如: 文件#1: 文件#2: 在本例中,我使用字典以便稍后将数据插入表中。 首先我有一个创建字典的函数。在本例中,第一个字典如下所示: {'XBT':1,'ABC':2,'ABD':3} {'ABC':4,'ABD':5} INSERT INTO summa

我在Python中使用Psycopg2,以便将数据插入到PostgreSQL摘要表中。我试图插入的数据是从数百个CSV文件中获取的数据。我知道如何获取我需要的数据,而且我已经有了这样做的代码。问题是,在某些CSV文件中,某些值不存在

例如: 文件#1:

文件#2:

在本例中,我使用字典以便稍后将数据插入表中。 首先我有一个创建字典的函数。在本例中,第一个字典如下所示:

{'XBT':1,'ABC':2,'ABD':3}
{'ABC':4,'ABD':5}
INSERT INTO 
summary(XBT,ABC,ABD)
VALUES (%s, %s, %s)
第二个是这样的:

{'XBT':1,'ABC':2,'ABD':3}
{'ABC':4,'ABD':5}
INSERT INTO 
summary(XBT,ABC,ABD)
VALUES (%s, %s, %s)
问题将出现在INSERT INTO命令上。我有一个将数据插入表的函数,如下所示:

{'XBT':1,'ABC':2,'ABD':3}
{'ABC':4,'ABD':5}
INSERT INTO 
summary(XBT,ABC,ABD)
VALUES (%s, %s, %s)
当循环尝试遍历第二个文件时,我将得到一个错误,因为字典没有'XBT'值。
我正在寻找的解决方案是,如果字典缺少一个值,INSERT INTO函数仍然会向表中添加一个新行,而这将没有缺少的值。不可能为每个场景创建插入函数,因为有100多个变量。

简单的解决方案是将字典中的键转换为
%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.