SQLite/Python相同的变量名和列名问题

SQLite/Python相同的变量名和列名问题,python,sqlite,Python,Sqlite,因此,我正试图通过建立一个简单的数据库来解决如何将SQLLite与python结合使用的问题,该数据库中包含了不同的学生、他们的课程作业和分数等等。。。。 我正在写一个函数来更新我的数据库,根据学生的id、单元id和分数来更新我的数据库。但是,我的作业表中有一列名为mark 这就是我认为有效的方法 def mark_assignment(database, studentid, assessmentid, mark): mark = score access_databa

因此,我正试图通过建立一个简单的数据库来解决如何将SQLLite与python结合使用的问题,该数据库中包含了不同的学生、他们的课程作业和分数等等。。。。 我正在写一个函数来更新我的数据库,根据学生的id、单元id和分数来更新我的数据库。但是,我的作业表中有一列名为mark

这就是我认为有效的方法

def mark_assignment(database, studentid, assessmentid, mark):
    mark = score
        access_database(database,"UPDATE assignments SET mark = score, marked = 1  WHERE assignments.studentid = studentid AND assignments.assessmentid = assessmentid ")

您所要做的就是在执行时在SQL行中添加占位符

str.format()是Python3中的字符串格式化方法之一,它 允许多个替换和值格式设置。这种方法让 us通过位置格式连接字符串中的元素。 格式函数中的每个参数都将替换字符串中相应的占位符。

下面是一个小例子:

#Code
first_name = "Heeth" 
last_name = "Jain" 
print("Hello {} {}".format(first_name, last_name))

#Output
Hello Heeth Jain
SQL语句如下所示:

"UPDATE assignments SET mark = {}, marked = 1  WHERE assignments.studentid = {} AND assignments.assessmentid = {}".format(mark, studentid, assessmentid)
由于您在该命令中使用的是单个表,因此您还可以按如下方式更改语句(我刚刚将作业.studentid更改为studentid,依此类推:

"UPDATE assignments SET mark = {}, marked = 1  WHERE studentid = {} AND assessmentid = {}".format(mark, studentid, assessmentid)
所以最后,在改变之后,应该是这样的:

def mark_assignment(database, studentid, assessmentid, mark):
    statement = "UPDATE assignments SET mark = {}, marked = 1  WHERE studentid = {} AND assessmentid = {}".format(mark, studentid, assessmentid)
    access_database(database, statement)
注意: 在现实生活中,使用str.format()是一个坏主意,因为它可能会被SQL注入误用。但是,由于我们只知道这个函数,而不知道整个代码,格式化在这里会有所帮助。在这些情况下,添加像这样的占位符是更好的选择。参考: