我进行了下一个查询来更新数据库中的一行。
def saveData(title, LL, LR, RL, RR, distanceBack):
c.execute("UPDATE settings SET (?,?,?,?,?,?) WHERE name=?",(title, LL, LR, RL, RR, distanceBack, title))
conn.commit()
我总是遇到下一个错误: sqlite3.OperationalError: close "(": 语法错误 我知道问号有些不对劲。我无法找出确切的解决方案是什么。有人可以解释一下问题是什么吗?
您可以使用以下 SQL 语法:
UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];
例如,如果您有一个名为“类别”的表,并且想要编辑类别名称,则可以使用:
c.execute("UPDATE CATEGORY SET NAME=? WHERE ID=?", (name,category_id))
地点:
Category 是一个仅包含两项的表:(ID, NAME) 和 ID PRIMARY KEY。
您可以尝试在查询中简单地添加列名称作为字符串
import sqlite3
def updatedata():
conn=sqlite3.connect('SCHOOL.db')
cur=conn.cursor()
rno=int(input('Enter roll number whose data to be changed'))
column=input("enter column to be updated")
value=int(input("enter value to set"))
query='UPDATE STUDENT SET '+column+ ' = ? WHERE Rollno = ?'
cur.execute(query,(value,rno))
conn.commit()
print("Record Updated successfully")
conn.close()
回答您的问题(以及如果其他人想知道)
有人可以解释一下问题是什么吗?
我相信这很可能与你的 python 安装使用的 SQLite 版本有关。
SQLite官方文档在其UPDATE文档中说:
从 SQLite 版本 3.15.0 (2016-10-14) 开始,SET 子句中的赋值可以是左侧带括号的列名列表和右侧相同大小的行值。
因此,您可以像这样检查您的 Python 安装使用的 SQLite 版本:
>>> import sqlite3
>>> sqlite3.sqlite_version
'3.8.11' # return value from my python 2.7.14 installation
这意味着我将无法使用语法
SET (column1, column2) = (value1, value2)
,而必须使用语法 SET column1 = value1, column2 = value2
。希望这有帮助。
这可能取决于所使用的版本! 以下代码适用于
python 3.11.4
使用 sqlite 3.42.0(DB-API 2.6.0)
sqlUPDPrepared = '更新设置 SET title=?,LL=?,LR=?,RL=?,RR=?,distanceBack=?名称在哪里=?' // 注意:SET 后没有刹车,...
paramList = [标题,LL,LR,RL,RR,距离返回,标题] updateTuple = tuple(paramList 中的项目的项目) # = (标题, LL, LR, RL, RR, distanceBack, 标题) // 注意:cursor.execute 需要第二个参数的元组! // 注意:列表中的最后一个参数用于 where 子句!
c.execute(sqlUPDPrepared, updateTuple)
据我所知 UPDATE 查询必须类似于
UPDATE table SET (key=value, key2=value2, ...) WHERE <condition>
尝试将查询修改为类似的内容
c.execute("UPDATE settings SET (title=?,LL=?,LR=?,RL=?,RR=?,distanceBack=?) WHERE name=?",(title, LL, LR, RL, RR, distanceBack, title))