Python 如何选择要更新的密钥?

Python 如何选择要更新的密钥?,python,django,sqlite,Python,Django,Sqlite,我想通过使用request.data,使用postman从sqlite3数据库中选择一个要更新的字段。但是,我在收到此错误“操作错误”/ 靠近“?”:语法错误。我试过这个密码 def put(self,request,*args,**kwargs): connection = sqlite3.connect('/Users/lambda_school_loaner_182/Documents/job-search-be/jobsearchbe/db.sqlite3')

我想通过使用request.data,使用postman从sqlite3数据库中选择一个要更新的字段。但是,我在收到此错误“操作错误”/ 靠近“?”:语法错误。我试过这个密码

def put(self,request,*args,**kwargs):
        connection = sqlite3.connect('/Users/lambda_school_loaner_182/Documents/job-search-be/jobsearchbe/db.sqlite3')
        cursor = connection.cursor()
        req = request.data
        for key in req:
            if key == id:
                pass
            else:
                print(key)  
                cursor.execute("UPDATE users SET ? = ? WHERE id = ?;",(key,req[key],req['id']) )
        connection.commit()
        cursor.execute("SELECT * FROM users WHERE id=?", (request.data['id'],))
        results = cursor.fetchall()
        data = []
        # if request.data['id']
        for row in results:
            object1 = {}
            col_name_list = [tuple[0] for tuple in cursor.description]
            for x in range(0,len(col_name_list) ):
                object1[col_name_list[x]] = row[x]
            data.append(object1)
        cursor.close()

        # serializer =PostSerializer(data = request.data )
        # if serializer.is_valid():
        #   serializer.save()
        return Response(data)

您将无法使用
作为标识符(数据库结构,如表名和列名)。您需要使用字符串插值来输入列名

f“更新用户集{key}=?其中id=?”

主要用于值(用户提供的数据)

通常,SQL操作需要使用Python变量中的值。您不应该使用Python的字符串操作来组装查询,因为这样做是不安全的;它使您的程序容易受到SQL注入攻击(有关可能出错的幽默示例,请参阅)

相反,使用DB-API的参数替换。放作为占位符,然后提供一个值元组作为游标的execute()方法的第二个参数。(其他数据库模块可能使用不同的占位符,例如%s或:1。)