Python Sqlite UPDATE多个值

问题描述 投票:0回答:3

有没有办法在一条指令中进行这两个更新?

cur.execute("UPDATE table_name1 SET email = '[email protected]' WHERE id = 4")
cur.execute("UPDATE table_name1 SET phone = '0400-123-456' WHERE id = 4")

我尝试了各种各样的变化,但无法让它发挥作用。

编辑:我想传递电子邮件,电话和我作为参数。

python database sqlite sql-update
3个回答
1
投票

好。我提出了一个适用于参数的解决方案。

首先感谢David的原始答案。它有一个小的语法错误(在该答案的评论中得到纠正)但它足以帮助我找出如何在没有参数化的情况下使其工作。

(注意:我认为David在编辑问题之前发布了他的回复,以补充使用参数的需要。)

然后this answer帮我制定了解决方案的参数。

这是我对这个问题的解决方案。如果其他人有同样的问题,我正在进行操作,因为我在发布原始问题之前做了很多搜索,但找不到答案。

conn = sqlite3.connect('connex.db')
cur = conn.cursor()
mobileval = '0400-123-456'
emailval = '[email protected]'
constrain = 4

cur.execute("UPDATE licontacts310317 SET liemail=%s, limobile=%s 
             WHERE %s=?" % (liemailval, limobileval, id), (constrain,))

conn.commit()
conn.close()

1
投票

以下工作:此时它只是标准的SQL。

cur.execute("""UPDATE table_name1
            SET email = '[email protected]', phone = '0400-123-456'
            WHERE id = 4""")

1
投票

您的解决方案可以让您打开SQL注入。如果您阅读documentation的第一部分,它明确表示不会按照您提议的方式进行:

Never do this -- insecure!

symbol = 'RHAT'
c.execute("SELECT * FROM stocks WHERE symbol = '%s'" % symbol)

Do this instead

t = ('RHAT',)
c.execute('SELECT * FROM stocks WHERE symbol=?', t)

因此,您应该将代码更改为以下行:

conn = sqlite3.connect('connex.db')
cur = conn.cursor()
mobileval = '0400-123-456'
emailval = '[email protected]'
constrain = 4

q = "UPDATE licontacts310317 SET (?, ?) 
             WHERE (?)=(?)"

cur.execute(q, (liemailval, limobileval, id, constrain) )

conn.commit()
conn.close()

我没有测试过,但希望你能得到这个想法=)

© www.soinside.com 2019 - 2024. All rights reserved.