SQLite3,尝试使用占位符将用户输入的值插入到DB浏览器db中,该占位符具有自动递增的字段[重复]

zbq4xfa0  于 2023-04-21  发布在  SQLite
关注(0)|答案(2)|浏览(129)

此问题已在此处有答案

Passing SQLite variables in Python(1个答案)
How to use variables in SQL statement in Python?(5个答案)
3天前关闭。
我尝试使用占位符将值插入MyAccount表的数据库中。我认为问题在于我有一个自动递增的字段,因此我没有引用它。我一直收到不同的错误,例如数据库数据类型不匹配,我认为这是针对没有输入的自动增量字段(accountID),它就是不起作用,我试着查找这么多不同的变化。有什么帮助吗?


我尝试了这个,我期望值插入到数据库中

hjqgdpho

hjqgdpho1#

您需要调用execute,如(例如)

cur = con.cursor()
cur.execute(
    'INSERT INTO MyAccount (fullName, username, password, school, phoneNumber, yearGroup) VALUES (?, ?, ?, ?, ?, ?)',
    (input_fullName, input_username, input_password, input_school, input_phoneNumber, input_yearGroup),
)
con.commit()

,就是

  • 将查询作为一个带有?占位符的字符串(我在这里拼出了列名,所以占位符的顺序并不重要)
  • 占位符的值作为单个元组

sqlite3模块的文档中记录了这种方法(以及另一种字典方法)。

yyyllmsg

yyyllmsg2#

正如AKX提到的,你必须通过元组或列表传递参数。下面是一个函数的简短示例:

def qry_exec(db, sql, parameters):
    qry = QSqlQuery (db)
    qry.prepare (sql)
    for value in parameters:
       qry.addBindValue (value)
    if not qry.exec_ ():
        print (qry.lastError ().text ())
        return False
    else:
        return True

你可以这样称呼它:

sql = "INSERT INTO dbtable (field1, field2, field3) VALUES ( ?, ?, ?)"
    ret = QtSqlTools.qry_exec (db, sql, [ data1, data2, data3])

其中db是打开的数据库

相关问题