私はこれをpythonファイルで行っていますが、私のレコードはDBから削除しません。私のDBはGoogle Appエンジンです。このクエリに対してレコードは1つしかありません。どんな解決策ですか?Google App Engineテーブルからレコードを削除
2
A
答えて
6
1つのレコードしか返されないので、forループは必要ありませんが、停止してはいけません。 1レコードしか取得しない場合は、get()コールを使用できます。リストをdb.delete()コールに渡すと、レコードを一括で削除することもできます。例えば
db.delete(results)
は
for result in results:
db.delete(result)
と同じしかし、戻ってあなたのコードにあります。以下のコードは、1つのレコードを削除する必要があります
deleteContact = db.GqlQuery("SELECT * FROM FriendList WHERE myNum = :1 AND friendNum = :2", myId,friendId)
result = deleteContact.get()
db.delete(result)
はそう、あなたがそれを行うことを期待やって選択することを確認する必要があり返さ動作するはずです。
2
問題のコードはうまくいくように見えます。 selectステートメントと一致するFriendListエンティティがデータストアに実際に存在することを再度確認します。
ヒント:
deleteContact = db.GqlQuery("SELECT __key__ FROM FriendList WHERE myNum = :1 AND friendNum = :2", myId,friendId)
result = deleteContact.get()
if result is not None:
db.delete(result)
else:
logging.error('result was None')
あなただけのデータストアから鍵を取り出し、結果を何も行っていないので、より効率的になります。 1つの結果しか得られていないのでここでは大したことではありませんが、後にデータストアから多数のエンティティを削除する必要がある場合は注意が必要です。
1つのレコードだけが必要なので、deleteContact.get()を呼び出すと1つしか取得されませんが、一致するエンティティがない場合はNoneを返します。 Noneを渡すと、db.delete()はBadArgumentErrorをスローしますので、テストしてください。
また、deleteContact.fetch(1)は、一致するエンティティがない場合は空のリストを返します。これは、db.delete()に渡すと問題ありません。しかし、エンティティが実際に見つかったかどうかを確認したい場合は、fetch()から取得したリストの長さが0でないことを確認する必要があります。
関連する問題
- 1. Google App Engineアプリケーションの削除
- 2. Google App Engine/Objectifyソフト削除
- 3. Google App Engineのデータストアからデータを削除
- 4. Google App Engineからcsv
- 5. Google App Engine(Python)で削除を処理する方法
- 6. Google App Engineを -
- 7. Google App Engineデータストアエンティティが削除されない
- 8. App Engine(Java)からネームスペースを削除する
- 9. Google App Engineジオクエリ
- 10. Google App Engineの:
- 11. Google App Engine - JDODetachedFieldAccessException
- 12. Google App Engineリクエストステータス
- 13. EJB + Google App Engine
- 14. Google App Engine MemcacheException
- 15. Google App Engineキークラス
- 16. Google App Engineの:
- 17. Google App Engineタスクキュー
- 18. Google App Engine APNS
- 19. App Engine + Googleドキュメント
- 20. Google App Engine localhost
- 21. Google App Engine __main__モジュール
- 22. Google App Engine Profiler
- 23. Google App Engineスタックドライバー。
- 24. Google App Engineからのリクエストの送信
- 25. Google App Engine上のIPv6からIPv4へ
- 26. Google App Engineプロジェクトから実行可能
- 27. Google App Engineのデータストアビューアから削除してエンティティを削除しても、エンティティはMemcacheから削除されません。
- 28. Google App Engineからレコードを返すことができません
- 29. Google Cloud DatastoreとGoogle App Engine
- 30. Google App EngineとGoogleストレージ
db.delete(result)なし。それをチェックするか、fetch()を使用する必要があります。一致するエンティティが見つからない場合は空のリストを返します。 –