python sqlite3条件查询

Sqlite3 表


CREATE TABLE t (

    id INTEGER PRIMARY KEY,

    p1 INTEGER NOT NULL,

    p2 INTEGER NOT NULL,

    p3 INTEGER NOT NULL

)

INSERT INTO t (1, 11, 12, 13)

Python


def update(id, p1=None, p2=None, p3=None):

    db = self.get_db()

    db.execute('UPDATE t SET p1=?, p2=?, p3=? WHERE id=?', (p1, p2, p3, id))

当我使用update(1, 3, 4, 5)它时它可以工作,但是在 update(1, 3, 4) 上它给了我Error: NOT NULL constraint failed: t.p3什么是正常的,因为我应该这样做


if not p3:

    db.execute('UPDATE t SET p1=?, p2=? WHERE id=?', (p1, p2, id))

是否可以很简单地完成它?


例如:


stm = db.prep('UPDATE t SET')

if p1:

    stm.append('p1=?', p1)

if p2:

    stm.append('p2=?', p2)

if p3:

    stm.append('p3=?', p3)

stm.append('WHERE id=?', id)


米琪卡哇伊
浏览 189回答 1
1回答

holdtom

这将是我能想到的最简单的方法:def update(self, object_id, p1=None, p2=None, p3=None):  # don't use id as a variable name    db = self.get_db()    # if any of the parameters are None, set the new value to what it was already    db.execute('UPDATE t SET p1=ifnull(?, p1), p2=ifnull(?, p2), p3=ifnull(?, p3) WHERE id=?', (p1, p2, p3, object_id))就个人而言,出于安全原因,我会使用 ORM 而不是原始 SQL。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python