如何使用列名来指定使用 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 个值:name
和 id
,因此您的代码甚至不会 运行.
在 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
的值,因此您必须以相同的顺序在元组中传递它们的值。
例如,我想创建一个函数,将用户添加到我的 '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 个值:name
和 id
,因此您的代码甚至不会 运行.
在 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
的值,因此您必须以相同的顺序在元组中传递它们的值。