【问题标题】:How to commit INSERT INTO if I don't have all the values如果我没有所有值,如何提交 INSERT INTO
【发布时间】:2019-07-16 14:00:14
【问题描述】:

我在 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 个变量。

【问题讨论】:

    标签: python sql postgresql psycopg2


    【解决方案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.
    

    【讨论】:

      猜你喜欢
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      • 2018-04-18
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      相关资源
      最近更新 更多