从API获取已更改数据的列表,并将其与其他未更改的数据一起插入数据库PYTHON

时间:2018-12-04 20:42:46

标签: python postgresql psycopg2

这个标题可能有点误导,但是这里是我所在的地方

我的目标:

从JIRA api中获取数据并将其推送到Postgresql数据库(使用psycopg2)。但是需要通过查找和替换来更改列的数据之一,然后获取该列表并将其与API中未更改的其他数据一起推入数据库。

我目前所拥有的:

所以我进行查找并替换为:

从需要更改的API数据创建列表。

data_change = list((item['status']) for item in data_table['issues'])

然后我创建字典以映射需要更改的内容。

   severity = {
        'Blocker':  'Emergency',
        'Critical': 'High',
        'Major':    'High',
        'Moderate': 'Medium',
        'Minor':      'Low',
        'Trivial':  'Low'
    }

然后我创建一个新列表,其中包含需要使用变量“结果”输入数据库的所有数据

result = [severity.get(e, e) for e in data_change]

因此,现在我需要获取此列表,并将其与其他数据一起推送到数据库。

    def insert_into_table_epic(data_table):

                query = """
                    INSERT into
                        table
                    (id, name, status)
                    VALUES
                        %s;
                    """
                values = list((item['id'],
                               item['name'],
                               result) for item in data_table['issues'])


                extras.execute_values(cur, query, values)

                conn.commit()

问题:

问题在于此行:

values = list((item['id'],
                item['name'],
                result) for item in data_table['issues'])

API有50个不同的“问题”,因此这会在每行中添加一个值,从而导致50行。我将“结果”作为值之一传递,但这将不起作用,因为该变量本身就是一个列表,并将为每一行插入整个列表。

我当时正在考虑向数据库中进行查询,该查询将在数据放入后进行查找和替换,但是想知道是否可以通过以下途径做到这一点:

API ---->列表---->更改数据--->使用从API获取的其余数据插入db

问题:

如何更改此变量的“结果”,并使其能够通过“值”传递而又不占用每一行的整个列表

1 个答案:

答案 0 :(得分:1)

您可以直接进行转换(无需data_changeresult):

values = list((item['id'],
               item['key'],
               severity.get(item['status'], item['status'])
               ) for item in data_table['issues'])