Python 如何更新列发生变化的行?

Python 如何更新列发生变化的行?,python,django,Python,Django,如您所见,此函数更新用户字段,其中该字段取决于GET变量 def update_p(request): if request.method == "GET": field = request.GET.get("field", "") value = request.GET.get("value", "") result = Users.objects.raw("SELECT id, %s FROM blog_users WHERE id

如您所见,此函数更新用户字段,其中该字段取决于GET变量

def update_p(request):
    if request.method == "GET":
        field = request.GET.get("field", "")
        value = request.GET.get("value", "")

        result = Users.objects.raw("SELECT id, %s FROM blog_users WHERE id = %s LIMIT 1", [field, request.session['user_id']])[0]
        if result:
            result = getattr(result, field)
            result = value
            result.save()

    return HttpResponseRedirect("/blog/loggedin/profile/")
之后

if result:
这就是我感到困惑的地方。我发现了错误

AttributeError: 'unicode' object has no attribute 'save'
我不知道我为什么会犯这个错误,但希望这对你们大家都是不言自明的。如何防止错误,或者是否有更好的方法来实现此功能


谢谢您的帮助。

通过执行
result=getattr(result,field)
您已经将
result
转换为
'unicode'
值,而不是
用户
对象

你可能想写:

if result:
    setattr(result, field, value)
    result.save()

我认为您的字符串连接不正确

"SELECT id, %s FROM blog_users WHERE id = %s LIMIT 1", [field, request.session['user_id']]
应该是

"SELECT id, %s FROM blog_users WHERE id = %s LIMIT 1", %(field, request.session['user_id'])
比如说

>>> a = "SELECT id, %s FROM blog_users WHERE id = %s LIMIT 1", ["username", "ABC"]
>>> a
('SELECT id, %s FROM blog_users WHERE id = %s LIMIT 1', ['username', 'ABC'])
>>> a = "SELECT id, %s FROM blog_users WHERE id = %s LIMIT 1" %("username", "ABC")
>>> a
'SELECT id, username FROM blog_users WHERE id = ABC LIMIT 1' 

同样,有效的SQL要求ABC在引号中,“ABC”

即将回答此问题。。随你的便,先生。