繁体   English   中英

python sqlite3 UPDATE从变量设置

[英]python sqlite3 UPDATE set from variables

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

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 "(": syntax error 我知道问号有什么不正确。我找不到确切的解决方案。有人能解释一下问题是什么吗?

您可以使用以下 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。

回答您的问题(如果其他人想知道)

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

我相信这很可能与您的 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 希望这可以帮助。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM