2016-04-26 82 views
0

我有我想上传到数据库中的元组列表。我想用这样做一个查询,这样我就不必在每个元组解析时打开连接。通过Python将元组列表导入到Postgres中

我的元组列表示例如下(这个列表将会相当长): tuple_list = [(u'17',u'1',u'2',u'2'),(u '17',u'2',u'1',u'4')]

我想在postgres中写一个查询,它将采用这个tuple_list并通过列表工作来填充名为'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

您可以使用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) 
+0

我是新来的Pos​​tgres,这样的评论是非常有帮助的。由于我的元组列表可能有5个元组,甚至50个元组,我怎么能写出一个适合我传递给它的元组数量的查询? – LemusThelroy

+0

这是一个梦幻般的答案。谢谢。如果这个查询位于我的Python代码中,你认为从SQL注入安全吗?由于tuple_list来自Web应用程序的用户输入。 – LemusThelroy

+0

@LemusThelroy你应该确保所有插入的数据正确地逃脱。最好的方法是创建存储过程。这个例子不是保存! – salomonderossi

相关问题