-2

** 我的代码 **

    cur.execute('Update  stud  SET(fname,mname,lname,course,yns,radio,sy)VALUES("%s","%s","%s","%s","%s","%s","%s") where Studnum=="%s"'%(fname,mname,lname,course,yns,status,sy,studnum))
    con.commit()

错误

    cur.execute('Update  stud SET(fname,mname,lname,course,yns,radio,sy)VALUES("%s","%s","%s","%s","%s","%s","%s") where Studnum=="%s"'%(fname,mname,lname,course,yns,status,sy,studnum))

sqlite3.OperationalError:靠近“(”:语法错误

4

2 回答 2

0

这是一个基本的 SQL 语法问题。以下是您应该如何编写查询:

q = '''
    UPDATE stud SET
        fname = ?,
        mname = ?,
        lname = ?,
        course = ?,
        yns = ?,
        radio = ?,
        sy = ?
     WHERE
        Studnum = ?'''

cur.execute(q, (fname,mname,lname,course,yns,status,sy,studnum))

我用 替换了你%s?,这就是你应该如何将参数传递给 Python 中的查询。

这些被称为参数化查询,这样做有助于防止 SQL 注入,因为您没有直接在 SQL 查询中注入值。不仅如此,它还将确保该值被正确地转义为数据库类型。

在 Python 中,有一种处理所有数据库的标准方法,称为数据库 API(DB API)。wiki.python.org 上的wiki 条目更详细, Python 中 sqlite 的手册页也有一些示例。

于 2013-10-15T20:06:11.047 回答
-2

这行得通吗?

cur.execute("Update  stud  SET(fname,mname,lname,course,yns,radio,sy)VALUES('{}}','{}','{}','{}','{}','{}','{}') where Studnum=='{}'".format(fname,mname,lname,course,yns,status,sy,studnum))

我不知道您使用 MSSQL 的哪个数据库不喜欢双引号。

于 2013-10-15T20:07:02.320 回答