如何使用列名来指定使用 sqlite3 写入的内容?

How can I use column names to specify what to write to using sqlite3?

例如,我想创建一个函数,将用户添加到我的 'users' table:

def add_user(name, id):
    cursor.execute("INSERT INTO users VALUES (?, ?, ?)", (name, id))
    conn.commit()

(需要注意的是'name'列(不是变量)是第一列,'id'列是第三列)

这段代码将'name'变量写入第一列,即name列,将'id'变量写入第二列(不是id列)

有没有一种方法可以使用列的名称来指定要写入的内容?我想避免使用诸如将第二列的当前值写入自身,或向其添加 0 之类的解决方案。

首先,您使用了 3 个 ? 占位符并仅传递了 2 个值:nameid,因此您的代码甚至不会 运行.

INSERT 语句中,您可以指定将接收您作为元组提供的值的列:

cursor.execute("INSERT INTO users(name, id) VALUES (?, ?)", (name, id))

或:

cursor.execute("INSERT INTO users(id, name) VALUES (?, ?)", (id, name))

两种情况的结果是一样的。

对于INSERT INTO users(id, name)...,第一个?对应于列id的值,第二个?对应于列name的值,因此您必须以相同的顺序在元组中传递它们的值。