通过Python将元组列表导入Postgres

时间:2016-04-26 09:33:28

标签: python xml postgresql psycopg2

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

我的元组列表的示例如下(此列表将显着更长): tuple_list = [(u'17',u'1',u'2',u'2'),(u'17',u'2',u'1',u'4')]

我想在postgres中编写一个查询,该查询将使用此tuple_list并通过列表在一次调用db中填充一个名为“Predictions”的表。

单个电话如下:

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应用程序运行速度变慢。

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

1 个答案:

答案 0 :(得分:1)

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

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)