如何使用一个查询插入多行
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()
我编写了一个代码,允许我从 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()