google.appengine.ext.gql パッケージ

概要

GQL - SQL のようにデータストアに対して使用できるインターフェース。

データストアに対するクエリ メカニズムとして GQL ベースのクエリクラスを定義し、保存されたデータを操作するための代替モデルとして使用できます。

内容

google.appengine.ext.gql.Execute(query_string, *args, **keyword_args)ソース

クエリを解析して実行するためのコマンドを実行します。

クエリパーサー コードを呼び出して、バインドされていない状態のプロトクエリを作成します。このプロトクエリが実際のクエリにバインドされて実行されます。

パラメータ
  • query_string - 適切な形式の GQL クエリ文字列。

  • args - クエリ内で数値参照をバインドするために使用する残りの位置引数。

  • keyword_args - 辞書ベースの引数(名前付きパラメータ用)。

戻り値

*args を指定してクエリを実行した場合の結果。

class google.appengine.ext.gql.GQL(query_string, _app=None, _auth_domain=None, namespace=None)ソース

ベース: object

データストアに対する GQL インターフェース。

GQL は SQL に似た言語であり、SQL ユーザーにとって使い慣れた言語でオブジェクトのようなセマンティクスをより広範に利用可能にしたものです。GQL でサポートされる言語は時間とともに変化しますが、最初に扱うセマンティクスはきわめて単純です。

  • 予約語では大文字と小文字は区別されません。

  • 名前では大文字と小文字が区別されます。

SELECT の構文は非常に簡単です。

SELECT [[DISTINCT] <property> [, <property> …] | * | __key__ ]

[FROM <entity>] [WHERE <condition> [AND <condition> …]] [ORDER BY <property> [ASC | DESC] [, <property> [ASC | DESC] …]] [LIMIT [<offset>,]<count>] [OFFSET <offset>] [HINT (ORDER_FIRST | FILTER_FIRST | ANCESTOR_FIRST)] [;]

<condition> := <property> {< | <= | > | >= | = | != | IN} <value> <condition> := <property> {< | <= | > | >= | = | != | IN} CAST(<value>) <condition> := <property> IN (<value>, …) <condition> := ANCESTOR IS <entity or key>

現在のところ、パーサーには文法が単純である LL(1) が使用されます(1 つのトークンの先読みにより大部分が予測可能であるため)。

このクラスは、予約されたトークンを取り出すための基本的な正規表現トークン化を使用して実装され、再帰下降パーサーがコンパイル済みクエリのビルダーとして機能します。このコンパイル済みクエリは、引数にバインドされてから実行されます。

最初に Execute() を呼び出す際には、3 つのパラメータ受け渡しメカニズムがサポートされます。

  • 位置パラメータ

Execute(‘SELECT * FROM Story WHERE Author = :1 AND Date > :2’) - 名前付きパラメータ Execute(‘SELECT * FROM Story WHERE Author = :author AND Date > :date’) - リテラル(数値、文字列、ブール値、NULL) Execute(‘SELECT * FROM Story WHERE Author = ‘James’‘)

ユーザーは、データストアを他のタイプ(db.Email、db.GeoPt など)に変換することもできます。この言語は、呼び出し側がリテラルとパラメータの両方の変換を明示できる変換関数が用意されています。現在の変換演算子は次のとおりです。 - GEOPT(float, float) - USER(str) - KEY(kind, id/name[, kind, id/name…]) - DATETIME(year, month, day, hour, minute, second) - DATETIME(‘YYYY-MM-DD HH:MM:SS’) - DATE(year, month, day) - DATE(‘YYYY-MM-DD’) - TIME(hour, minute, second) - TIME(‘HH:MM:SS’)

すべての値を適切にシリアライズして引用符で囲みます。

また、構文で明示できるクエリにはいくつかの注意点があることに留意してください。これらはパーサーによって可能な限り解決されますが、一部を次に示します。

  • OR 演算は行われません。ほとんどの場合、IN を使用して、一連の値の 1 つに一致するデータが必要であることを明示してください。

  • 複数の異なるプロパティを不等式演算子で表すことはできません。

  • != 演算子はクエリごとに 1 つしか使用できません(前のルールに関連)。

  • IN および != 演算子は、データストアでの処理量を劇的に増加させる可能性があるため、慎重に使用してください。したがって、IN ステートメントで使用できる要素の数に制限が設けられています。この制限はかなり低く設定されています。現在、特定の GQL クエリで許容されるデータストア クエリの最大数は 30 個になっています。!= ではデータストア クエリ数の 2 倍に変換され、IN では句の要素数が乗算されます(したがって、5 つの要素を含む IN 句と 6 つの要素を含む IN 句の 2 つを使用する場合、30 のクエリが発生します)。

  • リテラルは、基本型または型キャスト リテラルの形式にすることができます。一方、リスト内のリテラルの形式は、現時点では単純な型(文字列、整数、浮動小数点数)にしかすることができません。

SELECT * は反復可能なエンティティのセットを返します。SELECT __key__ は反復可能なキーのセットを返します。

Bind(args, keyword_args, cursor=None, end_cursor=None)ソース

既存のクエリを引数リストにバインドします。

入力引数は位置、辞書の順になるものと想定されます。したがって、クエリに :1、:2、:name の参照が含まれている場合、引数は (:1, :2, dict) として渡されるものと想定されます(dict には [name] -> value のマッピングが含まれています)。

パラメータ
  • args - オブジェクトのバインドされていない参照にバインドする引数。

  • keyword_args - 辞書ベースの引数(名前付きパラメータ用)。

発生

datastore_errors.BadArgumentError - 引数がまだバインドされていない(入力引数で欠落している)か、引数が想定された型と一致しない場合。

戻り値

バインドされた datastore.Query オブジェクト。GQL クエリで複数のバックエンド クエリを満たすことが要求される場合は、MultiQuery オブジェクトの形式になることもあります。

EnumerateQueries(used_args, args, keyword_args)ソース

必要なすべてのマルチクエリ フィルタの組み合わせのリストを作成します。

マルチクエリ リクエスト(「IN」および「!=」フィルタ)を満たすには、複数のクエリが必要になることがあります。このコードでは、すべてのマルチクエリ フィルタのべき集合が列挙されます。

パラメータ
  • used_args - 使用された位置パラメータのセット(使用されていない位置引数の報告に使用される出力専用変数)。

  • args - プロトクエリ自体で参照される位置引数。入力はタプルである(また、可変引数パラメータで呼び出すことも可能である)ものと想定されます。

  • keyword_args - プロトクエリ自体で参照されるキーワード引数の辞書。

戻り値

指定した入力引数で GQL クエリを満たすために必要なすべてのクエリのマップ [(identifier, condition) -> value] のリスト。

MAX_ALLOWABLE_QUERIES = 30
RESERVED_KEYWORDS = (frozenset(['AND', 'ORDER_FIRST', 'FROM', 'ANCESTOR_FIRST', 'HINT', 'DISTINCT', 'IS', 'OFFSET', 'BY', 'FILTER_FIRST', 'ORDER', 'ASC', 'LIMIT', 'IN', 'NOT', 'GROUP', 'ANCESTOR', 'WHERE', 'OR', 'SELECT', 'DESC']), frozenset([]))
Run(*args, **keyword_args)ソース

このクエリを実行します。

datastore.Query.Run と同じです。制限 == -1 または > 0 と仮定されます。

パラメータ
  • args - コンパイルされたクエリ オブジェクト内の参照にバインドするために使用する引数。

  • keyword_args - 辞書ベースの引数(名前付きパラメータ用)。

戻り値

クエリ数の制限を超えた場合は結果リスト。制限が指定されていない場合は結果イテレータ。

TOKENIZE_REGEX = <_sre.SRE_Pattern object>
filters()ソース

コンパイルされたフィルタリストを返します。

hint()ソース

データストア ヒントを返します。

is_distinct()ソース

このクエリが別個のものとマークされている場合は True を返します。

is_keys_only()ソース

このクエリがキーを返す場合は True を返し、エンティティを返す場合は False を返します。

kind()ソース
limit()ソース

数値結果として数の制限を返します。

offset()ソース

数値結果としてオフセットを返します。

orderings()ソース

結果として順序付けリストを返します。

projection()ソース

射影の対象となるプロパティのタプル、または None を返します。

class google.appengine.ext.gql.Literal(value)ソース

ベース: object

バインドされていないパラメータとは異なる方法でリテラル値を表現するためのクラス。

これは基本型とデータストア型の単純なラッパークラスです。

Get()ソース

リテラルの値を返します。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Python の App Engine スタンダード環境