Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.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 使用内部联接和where条件更新_Python_Mysql_Sql Update - Fatal编程技术网

Python 使用内部联接和where条件更新

Python 使用内部联接和where条件更新,python,mysql,sql-update,Python,Mysql,Sql Update,我正在使用MySQL,创建了两个表,一个用于学生数据,一个用于出勤详细信息 考勤表具有学生Id的FK 这是考勤表 和学生资料表 我的问题: 我想根据学生ID更新考勤详情表,如下查询 sql = " UPDATE Attendance_table INNER JOIN students_data ON Attendance_table.ID=students_data.ID SET Attendance_table.ID=students_data.ID , Statues=%s , DateTi

我正在使用MySQL,创建了两个表,一个用于学生数据,一个用于出勤详细信息

考勤表具有学生Id的FK 这是考勤表

和学生资料表

我的问题:

我想根据学生ID更新考勤详情表,如下查询

sql = " UPDATE Attendance_table INNER JOIN students_data ON Attendance_table.ID=students_data.ID SET Attendance_table.ID=students_data.ID , Statues=%s , DateTime=%s , WHERE students_data.fname = %s"
val=(1,formatted_date,name)
mycursor.execute(sql,val)
mydb.commit()
我犯了个错误

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE students_data.fname = 'ABN''
注意:我正在进行人脸识别项目,其中所有人脸都有一个预定义的名称,并将其与学生的数据进行比较 所以ABN这个名字是从脸上读出来的:


任何帮助或建议

在where之前使用了额外的逗号

DateTime=%s , WHERE students_data.fname = %s"
删除这个逗号。您的代码应该是:

sql = " UPDATE Attendance_table INNER JOIN students_data ON Attendance_table.ID=students_data.ID SET Attendance_table.ID=students_data.ID , Statues=%s , DateTime=%s  WHERE students_data.fname = %s"

若要在考勤表中插入数据,请避免更新查询。您应该使用INSERT查询,而不需要加入查询

INSERT INTO Attendance_table (ID,Statues,DateTime) SELECT ID, %s as Statues, %s as DateTime FROM students_data WHERE students_data.fname = %s

为什么使用相同的ON子句和SET子句“Attention\u table.ID=students\u data.ID”?您的考勤表中是否存在要更新的ID?否,它将从Student table中获取ID您是否更改了问题?上面的文章描述了一个语法错误。未提及我们需要在中查看数据的未更新数据。@Albandry我为您添加了另一个答案。请检查,请不要喊叫。
sql = " UPDATE Attendance_table INNER JOIN students_data ON Attendance_table.ID=students_data.ID SET Attendance_table.ID=students_data.ID , Statues=%s , DateTime=%s  WHERE students_data.fname = %s"
INSERT INTO Attendance_table (ID,Statues,DateTime) SELECT ID, %s as Statues, %s as DateTime FROM students_data WHERE students_data.fname = %s