我想通过使用request.data使用postman从我的sqlite3 db中选择一个要更新的字段。 但是,我收到这个错误“operationalerror at/near”?“:syntax error”。 我试过这个代码
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“Update users SET{key}=?WHERE id=?”
?
基本上用于值(用户提供的数据)。
https://docs.python.org/3/library/sqlite3.html
通常,您的SQL操作将需要使用来自Python变量的值。 您不应该使用Python的字符串操作来组装查询,因为这样做不安全; 它使您的程序容易受到SQL注入攻击(请参阅https://xkcd.com/327/以获得可能出错的幽默示例)。
相反,使用DB-API的参数替换。 放? 作为占位符,然后提供一个值元组作为游标的execute()方法的第二个参数。 (其他数据库模块可能使用不同的占位符,如%s或:1.)