通过循环创建查询并检查存在的行存在或插入

时间:2016-02-23 23:29:11

标签: python postgresql

我有一个Python列表,我试图插入或更新到Postgresql。我已经尝试了for循环和while循环,但是当我试图检查用户已经存在于postgres中时它会变得混乱。我想遍历列表列表并插入/更新postgres中的每个用户。

我有以下变量,你建议我选择哪种方式?我的最后一个镜头是if存在,它不适用于postgres ..

userList = [user1, user2, user3]
i=0 
while ( i < len(userList)):
    query = "IF EXISTS (SELECT * FROM login WHERE email = '" + userList[i][2] + "') INSERT INTO login (created, username, password, email) VALUES (NOW(), '" + userList[i][0] + "','" + userList[i][1] + "','" + userList[i][2] + "')"
    i += 1
    settings.database_connection.execute_sql(query)

提前谢谢!

1 个答案:

答案 0 :(得分:0)

PostgreSQL 9.5中有新功能(所谓的UPSERT)。所以你可以插入或更新一行:

INSERT INTO login VALUES (<your values>)
ON CONFLICT(email) DO UPDATE SET password=..., email=...;

官方文档中的更多详细信息:PostgreSQL 9.5.1 Documentation: INSERT