通过 Python 将元组列表导入 Postgres

Importing tuple list into Postgres via Python

我有一个要上传到数据库中的元组列表。我想用一个查询来做到这一点,这样我就不必在解析每个元组时打开连接。

我的元组列表的一个例子如下(这个列表会长很多): tuple_list = [(u'17',u'1',u'2',u'2'), (u'17',u'2',u'1',u'4') ]

我想在 postgres 中编写一个查询,该查询将采用此 tuple_list 并遍历列表以在对数据库的一次调用中填充名为 'Predictions' 的 table。

单个调用如下所示:

insert into 'Predictions' (userid, fixture_no, home_score, away_score) values (17, 1, 2, 2)

我研究过将元组转换为 XML 文件,但想知道是否有更好的方法仅在 Postgres 中使用元组列表来完成此操作?

如果没有,我设法生成的 XML 文件看起来像这样...

<root>
  <User_Id/>
  <Fix_No/>
  <Home_Score/>
  <Away_Score/>
  <User_Id>17</User_Id>
  <Fix_No>1</Fix_No>
  <Home_Score>2</Home_Score>
  <Away_Score>2</Away_Score>
  <User_Id>17</User_Id>
  <Fix_No>2</Fix_No>
  <Home_Score>1</Home_Score>
  <Away_Score>4</Away_Score>
</root>

我的主要目标是一次性将所有预测发送到数据库,而不是进行多次调用,这会使我的 Web 应用程序 运行 变慢。

任何想法或建议都会很棒!

您可以使用 postgresql documentation 的示例部分中描述的多行 VALUES 语法。这是一个 python 片段,它从你的问题的 tuple_list 创建插入语句。

tuple_list = [(u'17',u'1', u'2', u'2'), (u'17',u'2', u'1', u'4')]
a = ["("+", ".join(a)+")" for a in tuple_list]
sql = "insert into 'Predictions' (userid, fixture_no, home_score, away_score) VALUES %s" % (",".join(a))
print(sql)

# Insert into database (code from memory)
args_str = ','.join(cursor.mogrify("%s", (x, )) for x in tuple_list)
cursor.execute("INSERT INTO 'Predictions' (userid, fixture_no, home_score, away_score) VALUES "+args_str)

输出:

insert into 'Predictions' (userid, fixture_no, home_score, away_score) VALUES (17, 1, 2, 2),(17, 2, 1, 4)