Python 如何选择要更新的密钥?
我想通过使用request.data,使用postman从sqlite3数据库中选择一个要更新的字段。但是,我在收到此错误“操作错误”/ 靠近“?”:语法错误。我试过这个密码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')
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。)