有没有办法在一条指令中进行这两个更新?
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")
我尝试了各种各样的变化,但无法让它发挥作用。
编辑:我想传递电子邮件,电话和我作为参数。
好。我提出了一个适用于参数的解决方案。
首先感谢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()
以下工作:此时它只是标准的SQL。
cur.execute("""UPDATE table_name1
SET email = '[email protected]', phone = '0400-123-456'
WHERE id = 4""")
您的解决方案可以让您打开SQL注入。如果您阅读documentation的第一部分,它明确表示不会按照您提议的方式进行:
symbol = 'RHAT'
c.execute("SELECT * FROM stocks WHERE symbol = '%s'" % symbol)
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()
我没有测试过,但希望你能得到这个想法=)