我有一个SQLite数据库,正在其中运行新的UPSERT。 (此外,是的,您没看错。UPSERT's!在SQLite中!)它具有列:name
(UNIQUE
),descr
和author_id
。我知道我可以使用
db.execute('INSERT INTO post (name, descr, author_id)'
' VALUES (?, ?, ?)'
' ON CONFLICT(name)'
' DO UPDATE SET descr = ?, author_id = ?',
(self.name, self.descr, self.author_id, self.descr, self.author_id)
)
但这在最后一行似乎很重复。有没有一种干净的方法可以将相同的值(例如:self.descr
)映射到多个问号(例如:第二个和第四个)?还是这仅仅是最好的方法?
答案 0 :(得分:2)
是的,您可以使用命名参数:
db.execute('INSERT INTO post (name, descr, author_id)'
' VALUES (:name, :descr, :author_id)'
' ON CONFLICT(name)'
' DO UPDATE SET descr = :descr, author_id = :author_id',
{'name': self.name, 'descr': self.descr, 'author_id': self.author_id}
)