django のクエリセット操作
から取得した。 http://jfy3d.iteye.com/blog/483482
number = len(isps)
isp = isps[0]
# a2 = isps[-1] # Subscripts cannot be negative
for isp in isps:
print isp.ispName
isp_list = list(isps)
for isp_str in isp_list:
print isp_str
isp_reps = repr(isps)
print isp_reps
Return results.
2
1
China Mobile
CenturyLink
ISPModel object
ISPModel object
ISPModel object
ISPModel object
[<ISPModel: ISPModel object>, <ISPModel: ISPModel object>, <ISPModel: ISPModel object>, <ISPModel: ISPModel object>]
クエリ API リファレンス
この文書では クエリセット このAPIは、既存のモデル情報やデータベースクエリの知識に基づいているので、事前にこれらのドキュメントを読み、理解する必要があります。
このリファレンスでは、既存のウェブログの例を使用します。
QuerySetsが評価されるとき
内部的には QuerySetは、値を要求されるまで、実際にデータベースに触れることなく、構築、フィルタリング、切り取り、配布されます。
を変更することができます。 クエリセット クエリーの値
- ドロップします。QuerySetはドロップ可能で、最初にデータベースクエリを実行します。たとえば、これはデータベース内のすべてのエントリーの見出しを表示します。
for e in Entry.objects.all():
print e.headline
- スライシングを行う。QuerySet を制限すると言いましたが、QuerySet は Python の配列スライシング構文を使ってスライスすることができます。通常、 QuerySet をスライスすると別の QuerySet を返しますが、 Django は "step" というスライス引数の構文を使うと、データベースクエリを実行し てくれます。
-
シリアライゼーションとキャッシュ。QuerySetsをシリアライズする際の詳細については、次のセクションを参照してください。Querysetの結果は、データベースから読み取ることが重要です。
- repr(). repr() が呼ばれると、QuerySet が評価されます。これは、Pythonでの対話的な解釈を容易にするためで、APIの対話が実行されるとすぐに結果を見ることができます
- len()を使用します。len() がコールされると、QuerySet が評価されます。ご想像のとおり、これはクエリセットの数を返します。
-
list()を使用します。値を強制的に
例えばPythonコードentry_list = list(Entry.objects.all())
クエリセットAPI
通常、手動で作成することはありませんが、QuerySetを宣言したManagerを渡します。
クラス クエリセット ( [ model=None ] )
通常、通信を行う場合は クエリセットの場合、フィルタチェーンを使用します。 クエリセット メソッドは、すべて新しい クエリセット
QuerySet メソッドは、新しい QuerySet を返します。
フィルタ(**kwargs)
クエリパラメータをマッチングした後、新しい QuerySet を返します。
<スパン exclude(**kwargs)
クエリパラメータにマッチしなかった場合、新しいQuerySetを返します。
Entry.objects.exclude(pub_date__gt=datetime.date(2005, 1, 3), headline='Hello')
SQLに変換
SELECT ...
WHERE NOT (pub_date > '2005-1-3' AND headline = 'Hello')
Entry.objects.exclude(pub_date__gt=datetime.date(2005, 1, 3)).exclude(headline='Hello')
SQLに変換
SELECT ...
WHERE NOT pub_date > '2005-1-3'
OR NOT headline = 'Hello'
この例では、すべての pub_date が <スパン '2005-1-3' または "hello"の見出しがある。
<スパン <スパン <スパン
order_by(*fields)
sort Entry.objects.filter(pub_date__year=2005).order_by('-pub_date', 'headline')
の前に "-"を付けると降順になります。
reverse()
クエリ結果の並べ替えを反転させる
distinct()
重複排除
<スパン 値(*fields)
クエリ結果をmodコレクションではなく、辞書リストに変換します。
# This list contains a Blog object.
>>> Blog.objects.filter(name__startswith='Beatles')
[<Blog: Beatles Blog>]
# This list contains a dictionary.
>>> Blog.objects.filter(name__startswith='Beatles').values()
[{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}]
結果フィールド名を指定することも可能です。
>>> Blog.objects.values()
[{'id': 1, 'name': 'Beatles Blog', 'tagline': 'All the latest Beatles news.'}],
>>> Blog.objects.values('id', 'name')
[{'id': 1, 'name': 'Beatles Blog'}]
values_list(*fields)
クエリ結果セットのmodをタプルに変換する
>>> Entry.objects.values_list('id', 'headline')
[(1, u'Erster Eintrag'), ...]
>>> Entry.objects.values_list('id').order_by('id')
[(1,), (2,), (3,), ...]
>>> Entry.objects.values_list('id', flat=True).order_by('id')
[1, 2, 3, ...]
all()
すべての結果を取得する
select_related()
関連データの取得、関連データの深さを設定することができます、設定されていない場合、関連データは、遅延ロードとして読み取られます。
# Ruft die Datenbank auf.
e = Entry.objects.get(id=5)
# Ruft erneut die Datenbank auf, um das zugehörige Blog-Objekt zu erhalten.
b = e.blog
# Ruft die Datenbank auf.
e = Entry.objects.select_related().get(id=5)
# Greift nicht auf die Datenbank zu, da e.blog bereits in der vorherigen Abfrage # ausgefüllt wurde.
# in der vorherigen Abfrage vorausgefüllt wurde.
b = e.blog
class City(models.Model):
# ...
class Person(models.Model):
# ...
hometown = models.ForeignKey(Stadt)
class Book(models.Model):
# ...
autor = models.ForeignKey(Person)
b = Book.objects.select_related().get(id=4)
p = b.author # Trifft nicht auf die Datenbank.
c = p.hometown # Trifft nicht auf die Datenbank.
b = Book.objects.get(id=4) # Kein select_related() in diesem Beispiel.
p = b.author # Treffer in der Datenbank.
c = p.hometown # Treffer in der Datenbank.
extra(select=None, where=None, params=None です。 tables=None です。 order_by=None です。 select_params=None
拡張クエリ
DJANGO のクエリ API ではクエリ条件を簡単に設定できない場合があり、クエリを拡張する別の方法を提供します。 エクストラ
セレクト
Entry.objects.extra(select={'is_recent': "pub_date > '2006-01-01'"})
Blog.objects.extra(
select={
'entry_count': 'SELECT COUNT(*) FROM blog_entry WHERE blog_entry.blog_id = blog_blog.id'
},
)
Blog.objects.extra(
select=SortedDict([('a', '%s'), ('b', '%s')]),
select_params=('eins', 'zwei'))
<スパン どこ / テーブル
Entry.objects.extra(where=['id IN (3, 4, 5, 20)'])
<スパン オーダーバイ
q = Entry.objects.extra(select={'is_recent': "pub_date > '2006-01-01'"})
q = q.extra(order_by = ['-is_recent'])
<スパン パラメータ
Entry.objects.extra(where=['headline=%s'], params=['Lennon'])
公式ドキュメントを参照する。
https://docs.djangoproject.com/en/dev/ref/models/querysets/
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例