Python Sqlite UPDATE多个值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python Sqlite UPDATE多个值相关的知识,希望对你有一定的参考价值。

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

cur.execute("UPDATE table_name1 SET email = 'foo@bar.com' 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 = 'foo@bar.com'
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 = 'foo@bar.com', phone = '0400-123-456'
            WHERE id = 4""")
另一答案

您的解决方案可以让您打开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 = 'foo@bar.com'
constrain = 4

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

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

conn.commit()
conn.close()

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

以上是关于Python Sqlite UPDATE多个值的主要内容,如果未能解决你的问题,请参考以下文章

sqlite3:对多个唯一列进行INSERT或IGNORE或UPDATE

Python3 | sqlite3:executemany() 不插入任何内容

SQLite3 笔记

SQLite进阶-17.视图

SQLite 数据库不会使用 Python 变量进行更新

sql 请教update语句in多个值时,进行多次更新