python sqlite-将相同的值分配给多个? UPSERT中的参数替换

时间:2018-07-24 20:01:31

标签: python sqlite

我有一个SQLite数据库,正在其中运行新的UPSERT。 (此外,是的,您没看错。UPSERT's!在SQLite中!)它具有列:nameUNIQUE),descrauthor_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)映射到多个问号(例如:第二个和第四个)?还是这仅仅是最好的方法?

1 个答案:

答案 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}
)