高度なPython Shellを使用してデータを操作する

3276 ワード

AdminサイトがUIを使用してデータを容易に管理できる場合、Shellデータ処理は、複雑な条件を検索するなど、より多くのデータ管理コマンドを提供することができる.
したがって,複雑なデータを扱う場合やWebブラウザ接続を必要としない場合には,通常Shellを用いてデータを扱う.
python manage.pyshellコマンドでPython shellを起動します.
FishelコマンドもFishen Shellですが、Fishen Shellとの違いはmanageです.pyモジュールで定義したDJANGO SETTINGS MODULEプロパティを使用して、mysite/設定を事前に行います.pyモジュールをインポートします.
テーブルはレコードの集合と呼ぶことができ、ライブラリ内のORMはこれらのテーブルの構造をクラスと表す.クラス内のオブジェクトの作成=テーブル内のレコードの作成

Create


フィールド値を指定してテーブルにレコードを作成してオブジェクトを作成し、save()メソッドを呼び出します.save()コマンドは実行前にメモリのみで変更され、save()コマンドはSQL用語のINSERT文を内部で実行します.

Read


Querysetオブジェクトを使用してDBからデータを問合せます.QuerySetはDBテーブルから抽出したオブジェクトの集合である.QuerySetは、フィルタを使用してQuerySetのアイテムから条件を満たすレコードを再抽出します.SQL用語では、QuerySetはSELECT文字に対応し、フィルタはWHERE節に対応する.
コレクションとは?
複数のオブジェクトを集約し、各オブジェクトを同じ方法で処理するデータ構造.
クエリー結果を含むQuerySetを取得するには、objectsオブジェクトを使用します.objectsオブジェクトは、テーブル情報を含むオブジェクトです.
>>> Question.objects.all() 	# 'Question테이블.레코드들.모두' 라고 해석하면 된다.
すべてのレコードではなく、特定のレコードのみを検索する場合は、filter()メソッドとexclude()メソッドを使用します.
  • フィルタ()は、所定の条件を満たすオブジェクトを含むQuery Set
  • を返す.
  • exclude():与えられた条件を満たすオブジェクト以外のQuery Set
  • を返す.
    これらのQuerySetメソッドはまたQuerySetセットを返すので、チェーン呼び出しを行うことができる.
    >>> Question.objects.filter(
    		question_text__startswith='What'
    ).exclude(
    	pub_date__gte=datetime.date.today()
    ).filter(
    	pub_date__gte=datetime(2005, 1, 30)
    )
    
    要素が1つしかないと判断した場合、get()メソッドを呼び出すことができます.呼び出し結果はQuerySetではなく、オブジェクトです.
    >>> one_entry = Question.objects.get(pk=1)
    また、Pythonの配列スライド構文を使用して、QuerySet要素の数を制限することもできます.SQL用語はOFFSET、LIMIT節に相当する.実行結果は、QuerySetではなくリストを返します.
    >>> Question.objects.all()[:5]
    >>> Question.objects.all()[5:10]
    >>> Question.objects.all()[:10:2]

    Update


    既存のオブジェクトのフィールド値を変更しても、フィールド属性値を変更しsave()メソッドを呼び出すことができます.SQL用語はUPDATEに相当します.
    >>> q.question_text = 'What is your favorite hobby ?'
    >>> q.save()
    複数のオブジェクトを一度に変更する場合はupdate()メソッドを使用します.
    >>> Question.objects.filter(pub_date__year=2007).update(question_text='Everything is the same')

    Delete


    pub dateが2005のすべてのオブジェクトを削除
    >>> Question.objects.filter(pub_date__year=2005).delete()
    Questionクラスのすべてのオブジェクト、すなわちQuestionテーブルのすべてのレコードを削除
    >>> Question.objects.all().delete()

    投票アプリケーションデータ実験


    すべてのレコードを表示するなど、簡単なクエリーの実践.

    filter()関数などを使用して様々な条件をクエリーし、1:N関係で接続するテーブル角や必要な操作を練習します.




    出典:Djangoで学ぶPythonネットワークプログラミング(ベース)-金錫勲