python sqlite3 UPDATE从变量设置

时间:2016-09-07 14:41:57

标签: python sqlite sql-update

我做了下一个Query来更新我的数据库中的一行。

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:near"(":语法错误 我知道问号并不正确。我无法找出确切的解决方案。有人可以解释我的问题是什么吗?

4 个答案:

答案 0 :(得分:3)

您可以使用以下SQL语法:

UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];

例如,如果您有一个名为Category的表,并且您想编辑可以使用的类别名称:

c.execute("UPDATE CATEGORY SET NAME=? WHERE ID=?", (name,category_id))

其中:

类别是一个只包含两个项目的表:(ID,NAME),ID为PRIMARY KEY。

答案 1 :(得分:0)

回答你的问题(如果有人想知道的话)

  

有人可以解释我的问题是什么吗?

我认为这很可能与你的python安装使用的SQLite版本有关 官方SQLite文档在其UPDATE documentation中说明了

  

从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。希望这会有所帮助。

答案 2 :(得分:0)

您可以尝试在查询中简单地将列名添加为字符串

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()

答案 3 :(得分:-1)

据我所知     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))