0

我正在为我作为 Comp Sci 专业的最后一门课程做一个软件工程项目,当我尝试在将我的方法与我们的方法合并之前对方法进行数据/单元测试时,我对这个特定的错误感到困惑队友GUI。任何能帮助我解决这个问题的人都是我的英雄

class Student:
def __init__(self, StudentID, StudentName, conn: sql.Connection, curs: sql.Cursor):
    self.StudentID = StudentID
    self.StudentName = StudentName

def addStudent(self, curs: sql.Cursor):
    query = f"""INSERT INTO Student
            (StudentID, StudentName)
            VALUES ({self.StudentID},{self.StudentName})"""
    curs.execute(query)
4

1 回答 1

1

如评论所述,考虑参数化。现在,您的字符串格式不会将潜在的字符串值括在VALUES子句中的单引号中。使用涉及准备好的 SQL 语句中的占位符和执行调用中的绑定值的参数化,您无需担心此类引号。

def addStudent(self, curs: sql.Cursor):
    # PREPARED STATEMENT (NO VARIABLES)
    query = """INSERT INTO Student (StudentID, StudentName)
               VALUES (?, ?)
            """

    # EXECUTE BY BINDING PARAMS
    curs.execute(query, [self.StudentID, self.StudentName])

以上假设您使用的是sqlite3使用 qmark 占位符的 DB-API ?,. 大多数其他 Python DB-API%s用于占位符(不要与过时的字符串模格式符号混淆)。

于 2021-11-25T18:42:19.720 回答