質問者のminowa259です。
よろしくお願い致します。
早速ですが、今回初めてwebプログラミング(GAE/python)に手を付け始めたのですが、SQL自体初めてのため非常に困惑しております。
後からエンティティを修正出来るようにしたいのですが、方法がわかりません。
キーからエンティティを取り出す方法については
http://libro.tuyano.com/index3?id=110&page=5
上記を参照し、理解出来たのですがその逆になります。
エンティティの中身はわかっていて(例えばユーザー名やメールアドレス等)、そのエンティティのIDもしくはkeyを検索するにはどのようにすれば良いのでしょうか?
よろしくお願い致します。
No.1ベストアンサー
- 回答日時:
1件のエンティティを取り出して更新する場合と、複数のエンティティを取り出して更新する場合とで、やり方が少し違います。
例えば、
class Person(db.Model):
first_name = db.StringProperty()
last_name = db.StringProperty()
email = db.StringProperty()
となっている場合で、email が yamada_tarou@goo.ne.jp となっている1件のエンティティを取り出したい場合は、
email = 'yamada_tarou@goo.ne.jp'
yamada_tarou = Person.all().filter('email = ', email).get()
とします。
get() で取り出したエンティティのプロパティを変更するには、次のようにします。
yamada_tarou.email = 'yamada_tarou_2@goo.ne.jp'
yamada_tarou.put()
削除する場合は put() の代わりに delete() を使います。
次に複数のエンティティを取り出して更新する場合について説明します。
first_name と last_name だけでしか filter() をかけない場合、該当するエンティティが複数あるかも知れません。
そういうことが想定される場合、get() では1件しか取り出せないため、代わりに fetch() を使います。
first_name = 'tarou'
last_name = 'yamada'
query = Person.all()
query.filter('first_name = ', first_name)
query.filter('last_name = ', last_name)
query.order('email')
list_yamada_tarou = query.fetch(100)
としてあげると、first_name が tarou で last_name が yamada のエンティティを email の値でソートして100件まで取り出し、list_yamada_tarou にリストとして格納します。
fetch() で取り出したエンティティたちのプロパティを変更する場合、エンティティひとつひとつに for 文などでアクセスできます。
for ループ内でエンティティのプロパティを変更した後、 ループを抜けてから db.put() を使ってリスト内の全エンティティをまとめて put() します。
for yamada_tarou in list_yamada_tarou:
if yamada_tarou.email == 'yamada_tarou_2@goo.ne.jp':
yamada_tarou.email = 'yamada_tarou@goo.ne.jp'
db.put(list_yamada_tarou)
この例だと if 文で条件に合致した1件しか変更しないので、ループ内で yamada_tarou.put() としてもいいんですが……良い例が浮かびませんでした。すみません。
なお、リスト内のエンティティをまとめて削除する場合は db.delete(list_yamada_tarou) となります。
この filter() や order() を使った取り出し方の他にGQL という、SQL に似た書き方で取り出し条件を指定する方法もありますが、SQL には慣れていらっしゃらないということでしたので、こちらの方法を紹介させていただきました。
なお、 get() や fetch() で取り出した値の ID 値や key 名を得るには次のようにします。
email = 'tarou@goo.ne.jp'
yamada_tarou = Person.all().filter('email = ', email).get()
id = yamada_tarou.id()
key_name = yamada_tarou.key().name()
もし予め ID 値や key 名がわかっている場合は、次のようにします。
id = わかっている ID 値
yamada_tarou = Person.get_by_id(id)
yamada_tarou.email = 'yamada_tarou_2@goo.ne.jp'
yamada_tarou.put()
key_name = わかっている key 名
yamada_tarou = Person.get_by_key_name(key_name)
yamada_tarou.email = 'yamada_tarou@goo.ne.jp'
yamada_tarou.put()
詳細は参照URLをご覧ください。
ちなみに上に書いたコードのインデントは全角スペースにしているのでご注意ください。
参考になれば幸いです。
参考URL:http://code.google.com/intl/ja/appengine/docs/py …
詳細な例とご回答本当に助かりました。
ありがとうございます。
サンプルの通りでうまく動きました。
本当にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP コメント機能に返信欄を矢印で追加したい 1 2022/05/09 21:17
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- Skype スカイプのIDについておしえてください。 1 2023/04/13 08:52
- Visual Basic(VBA) Excel VBAのリストボックスの値を他のフォームに反映させる方法を教えてください。 2 2023/07/14 14:06
- ヤフオク! ヤフーアカウントについての質問です。 「不正利用が疑われる操作もしくは行為が検知されたため、利用規約 5 2022/08/29 20:22
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- SEO SEO対策などに詳しい方に質問です。 私は過去にこの掲示板を使い 幾度なく質問を投稿し 後に知った実 3 2022/12/11 13:05
- Wi-Fi・無線LAN PCWi-Fiの設定方法がわからなくて困っています。 4 2022/12/28 18:30
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- Google Drive Google IDでログインする時にアカウントID一覧に出てくるIDを削除したい。 1 2022/10/02 11:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Application.ScreenUpdating = ...
-
FindFirst を複数条件で検索
-
C++ コマンドプロンプトでの入...
-
phpでボタンを押したときに変数...
-
実行時エラー 3020の対策
-
VBA他のブックから値のみ貼付す...
-
UWSC:ポップアップウインドウ...
-
VBAで特殊文字を出力したい
-
ACCESS テキストボックスを隙...
-
構造体の各データの表示につい...
-
エクセルVBA シート名の部分一...
-
pythonの初心者です!コマンド...
-
【メモリ不足で落ちる(python)】
-
パイソンプログラミング
-
JSONで文字列が長い時
-
【至急!!!】python言語で本を見...
-
文字の横にプルダウンを表示さ...
-
Pythonのプログラミングの質問...
-
同じものを繰り返し表示させる
-
linuxにおけるCの自作ヘッダフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Application.ScreenUpdating = ...
-
実行時エラー 3020の対策
-
FindFirst を複数条件で検索
-
「*:*」って何を意味するのでし...
-
ACCESS テキストボックスを隙...
-
パイソンプログラミング
-
VBAでPDFのコピーとリネームを...
-
パイソンのクラスのブログラム
-
【メモリ不足で落ちる(python)】
-
[python] 文字列を変数名として...
-
パイソンのクラスについて
-
vscode 文字化け
-
PythonのExperimentに関する質...
-
vbaでxmlからNodeListでデータ...
-
phpでボタンを押したときに変数...
-
UWSC:ポップアップウインドウ...
-
VBA他のブックから値のみ貼付す...
-
構造体の各データの表示につい...
-
コンボボックスのtag情報の取得...
-
VBAで特殊文字を出力したい
おすすめ情報