我有一个要上传到我的数据库的元组列表。我想用一个查询来做这件事,这样我就不需要在解析每个元组时打开连接。
我的元组列表的示例如下(此列表将显着更长): 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应用程序运行速度变慢。
任何想法或建议都会很棒!
答案 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)