如何使用一个查询插入多行

How can I Insert multiple rows with one query

我编写了一个代码,允许我从 API GET 数据并将其 插入 数据库。 但是我遇到了一个问题,我的 api 包含大约 2000 万条数据,将所有内容插入我的数据库需要 43 天:)

我认为问题出在我一个一个地插入数据。

这就是我寻找如何一次执行所有查询的原因。

问题是我的数据是这样的列表[dict] :

<class 'list'>
{
    'siren': 'siren_int',
    'nic': 'nic int',
    'dateCreationEtablissement': '2000-09-26',
    'uniteLegale': {'denominationUniteLegale': None, 'nomUniteLegale': 'last name', 'prenomUsuelUniteLegale': 'firstname'},
    'adresseEtablissement': {
        'numeroVoieEtablissement': None,
        'libelleVoieEtablissement': 'street name',
        'codePostalEtablissement': 'postal code',
        'libelleCommuneEtablissement': 'commune name',
    }
}

目前我的代码如下所示:

    def insertGlobalBdd(self, rows : list[dict]) :
        cursor = self.bdd.cursor() 
        for element in rows:
            rows.append((element["siren"], self.TestFormat(element["uniteLegale"]["nomUniteLegale"]), 
                        self.TestFormat(element["uniteLegale"]["prenomUsuelUniteLegale"]), self.TestFormat(element["uniteLegale"]["denominationUniteLegale"]), 
                        element["dateCreationEtablissement"]))

        cursor.execute("""INSERT INTO %s.dbo.Entreprise (siren, nomUniteLegale, prenomUsuelUniteLegale, denominationuniteLegale, dateCreationEtablissement) VALUES ('%s', '%s', '%s', '%s', '%s')""".format(",".join(str(i) for i in rows)))
        self.bdd.commit()

你知道怎么做吗?

您可以使用 'executemany'。

例子

    task_all[
           (1,  "Jahanzabe", 30),
           (2,  "Steve", 20),
           (3,  "Haider", 30),
           (....All Others...)]
    cur.executemany('Insert in to Table_name(id, name, no) 
     values(?,?,?)', task_all)
    con.commit()