0

通常、Pythonでデータベース関連のクエリを作成するためにDjango ormを使用しますが、現在はPython自体を使用しています

mysqlデータベースの行を更新しようとしています

query ='UPDATE callerdetail SET upload="{0}" WHERE agent="{1}" AND custid="{2}"AND screenname="{3}" AND status="1"'.format(get.uploaded,get.agent,get.custid,get.screenname)

しかし、私はエラーが発生しています

query ='UPDATE callerdetail SET upload="{0}" WHERE agent="{1}" AND custid="{2}"AND screenname="{3}" AND status="1"'.format(get.uploaded,get.agent,get.custid,get.screenname)

AttributeError:'C'オブジェクトには属性がありません'uploaded'

私のクエリの何が問題になっているのか教えてください。

4

2 に答える 2

0

Get はおそらく ac オブジェクトにマッピングされています。「get」オブジェクトの名前を別のものに変更してみてください。

ここに予約語のリストがあります。そこに入る様子はありませんが、含まれている ac ライブラリの一部のように思えます。from x import *で何かを含めている場合、知らないうちにインポートしている可能性があります。

于 2012-09-29T08:35:25.760 に答える
0

要するにget、おそらくあなたが思っているものではありません。

ただし、文字列フォーマットを使用してさらに SQL クエリを作成する前に、そうしないことを強くお勧めします。「SQL インジェクション」を検索すると、その理由がわかります。Python DB API 準拠のライブラリは、必要なエスケープ/引用を提供するために、ライブラリが変数をクエリに挿入するために使用できる「プレースホルダー」を利用します。

したがって、代わりに:

query ='UPDATE callerdetail SET upload="{0}" WHERE agent="{1}" AND custid="{2}"AND screenname="{3}" AND status="1"'.format(get.uploaded,get.agent,get.custid,get.screenname)

SQLite3 を使用した例 (?プレースホルダーとして使用 - 他の人は%sor:1または %(name)s を使用 - または上記のいずれか/すべて - ただし、ライブラリのドキュメントで詳しく説明します):

query = "update callerdetail set upload=? where agent=? and custid=? and screename=? and status=?"

次に、クエリを実行するときに、置換する値を別の引数として指定します。

cursor.execute(query, (get.uploaded, get.agent, get.custid, get.screenname))

本当に必要な場合は、便利な関数を使用して、これを次のように減らすことができます。

from operator import attrgetter
get_fields = attrgetter('uploaded', 'agent', 'custid', 'screenname')
cursor.execute(query, get_fields(get))
于 2012-09-29T09:28:45.023 に答える