Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Sqlite插入错误_Python_Sqlite_Sql Insert - Fatal编程技术网

Python Sqlite插入错误

Python Sqlite插入错误,python,sqlite,sql-insert,Python,Sqlite,Sql Insert,我有一个插入到表中的代码。代码如下: cursor.execute("INSERT INTO Exercises Exercise, Weight WHERE ID = ?)VALUES (?,?)",(Exercise, Weight, ID,)) 练习是表名 练习和重量是表中的字段 ID是另一个表的外键 错误是sqlite3.OperationalError:near“Exercise”:语法错误 感谢您的帮助插入语句不支持WHERE子句。只需在INSERT语句中指定一个额外的列ID,如下

我有一个插入到表中的代码。代码如下:

cursor.execute("INSERT INTO Exercises Exercise, Weight WHERE ID = ?)VALUES (?,?)",(Exercise, Weight, ID,))
练习
是表名

练习
重量
是表中的字段

ID
是另一个表的外键

错误是
sqlite3.OperationalError:near“Exercise”:语法错误


感谢您的帮助

插入
语句不支持
WHERE
子句。只需在
INSERT
语句中指定一个额外的列
ID
,如下所示-

query = 'INSERT INTO Exercises(Exercise, Weight, ID) VALUES(?, ?, ?)'
cur.execute(query, (exercise, weight, id_))

或者,您可以根据提供的
ID
值查找
UPDATE
语句:

query = '''
UPDATE Exercises
SET Exercise = ?, Weight = ?
WHERE ID = ?
'''

cur.execute(query, (exercise, weight, id_))

第一个语法错误是,
Exercises Exercise
指定了一个表名和一个别名以供以后使用,您不允许在
INSERT
语句中这样做,只能在
SELECT
中这样做

但是,您可能不希望
Exercise
成为表别名,而是希望
Exercise,Weight
成为列列表,指定以后要为
提供值的列。必须放在括号内:

INSERT INTO Exercises (Exercise, Weight) WHERE ID = ?)VALUES (?,?)
同时,在
WHERE
子句之后,有一个不匹配的
。这是另一个语法错误。我不确定这是否意味着什么,但如果你把它去掉,这句话至少可以解析成短语:

INSERT INTO Exercises (Exercise, Weight) WHERE ID = ? VALUES (?,?)
但这仍然没有任何意义。
WHERE
子句在
INSERT
上的意思是什么

而且,即使它确实有意义,您也在传递参数
(Exercise,Weight,ID)
,但占位符的顺序不同,ID,Exercise,Weight。这将是一个相当严重的问题

不管怎样,快速猜一猜你想要什么:

cursor.execute("INSERT INTO Exercises (Exercise, Weight) VALUES (?,?)",
    (Exercise, Weight,))
ID = cursor.lastrowid
我不确定你是不是想这么做,但这是明智的

或者,您可能希望更新现有行:

cursor.execute("UPDATE Exercises SET Exercise=?, Weight=? WHERE ID=?",
    (Exercise, Weight, ID))

同时,您可能需要阅读上的文档和声明。尽管您可能首先需要一个基本的SQL教程复习。

您想用WHERE子句实现什么?第一个
应该做什么?您可能希望列列表周围有一个空格,但您肯定不希望where子句之前的所有内容都有半个空格。他可能希望
UPDATE
而不是
INSERT
,在这种情况下,很好地猜测是否希望存储ID;这是另一种可能性,我在回答中没有想到。更不用说糟糕的变量命名了。@cᴏʟᴅsᴘᴇᴇᴅ 嘿,我只需要调试一些向后获得两个命名参数的代码,并通过传递(相当于)
{'exercise':Weight,'Weight':exercise}
作为参数来修复它;相比之下,这件看起来并不那么糟糕嗨,谢谢大家的回复。我知道这不是最好的代码,因为我只是一个初学者,这是一个学校课程项目。我输入了上面的代码,但似乎每次添加新的练习和体重时都会在表中创建一条新记录,这意味着一个用户正在使用多个MemberID,因此如果关闭并重新打开框架,则无法引用。有没有办法防止这种情况发生,从而使ID相同?@DanielPatrick你需要准确地解释你想做什么,而不是让我们猜测。如果你不能用语言表达清楚(或者即使你可以!),展示一系列的调用以及预期的结果。请将其编辑到原始问题中。我想做的是,当单击按钮时,查询将使用正确的
ID
将练习和权重插入表
Exercises
。例如,如果输入了两个练习和两个权重,则它们将以相同的
ID
插入表中。希望我们有同样的理解。