Tag: how-to

  • Python GridDB API(更新版)

    Python GridDB API(更新版)

    2018年の初めに、GridDB用の最新のPythonクライアント(0.7.0)がリリースされました。本リリースでは、主にAPIが改良されています。 このブログでは、接続、クエリ、レコードの作成、その他の一般的な操作の基本について説明します。

    インストール

    Pythonをインストールするには こちらのブログ を参照してください。

    接続

    GridDBへの接続は、パラメータのリストを受け取る単一の呼び出しです。 GridDBを固定リストモードで使用している場合は、hostとportの代わりにnotification_memberを指定してください。

    self.gridstore = factory.get_store(
        host="239.0.0.1",
        port="31999",
        cluster_name="defaultCluster",
        username="admin",
        password="admin"
    )
    

    クエリ

    GridDBを照会するには、まず照会したいコンテナを開きます。次にクエリ操作の指定と実行を実施し、反復しながら結果を取り出します。 timestamp_output_with_floatを指定すると、GridDBはTIMESTAMPフィールドをPythonのdatetimeオブジェクトに変換しないため、パフォーマンスが大幅に向上します。

    try:
        cn = gridstore.get_container("DEVICE_READS");
        query = cn.query("select *")
        rs = query.fetch(False)
        rs.timestamp_output_with_float = True
    except:
        return []
    
    retval= []
    
    while rs.has_next():
        data = rs.next()
        retval.append(data)
    

    書き込み

    GridDBに書き込むには、フィールド名とフィールドの型を指定した配列を用意し、これをコンテナスキーマとして指定します。put_containerを使用してコンテナを開き、 putまたはmulti_put呼び出しでデータを書き込みます。

    conInfo = griddb.ContainerInfo("DEVICE_READS",
        [["ts", griddb.Type.TIMESTAMP],
        ["attr", griddb.Type.STRING],
        ["value", griddb.Type.LONG]],
        griddb.ContainerType.TIME_SERIES, True)
    
    ts = gridstore.put_container(conInfo)
    ts.set_auto_commit(False)
    ts.put([int(datetime.datetime.now().timestamp()*1000), "foo", 42.0])
    ts.commit()
    
    

    アップデート

    更新はクエリと書き込みを組み合わせたものです。 ContainerInfoオブジェクトを使用してコンテナを開き、データの取得(クエリ)、データの更新とコミットを繰り返します。 GridDBへの更新を有効にするには、queryオブジェクトのfetchメソッドにTrueをセットして呼び出してください。

    conInfo = griddb.ContainerInfo("DEVICE_READS",
        [["ts", griddb.Type.TIMESTAMP],
        ["attr", griddb.Type.STRING],
        ["value", griddb.Type.LONG]],
        griddb.ContainerType.TIME_SERIES, True)
    
    ts = gridstore.put_container(conInfo)
    ts.set_auto_commit(False)
    
    query = ts.query("select * where ts < TO_TIMESTAMP_MS("+str(epochTs)+")")
    rs = query.fetch(True)
    
    if rs.has_next():
        data = idx_rs.next()
        rs.update([data[0], "old_"+data[1], data[2]])
        rs.commit()
    
    

    削除

    照会されたコンテナー内の行を削除は、更新プロセスと非常によく似ています。 主な違いは、代わりに行キーをパラメータとして使用してremoveを呼び出すという点です。

    conInfo = griddb.ContainerInfo("DEVICE_READS",
        [["ts", griddb.Type.TIMESTAMP],
        ["attr", griddb.Type.STRING],
        ["value", griddb.Type.LONG]],
        griddb.ContainerType.TIME_SERIES, True)
    
    ts = sgridstore.put_container(conInfo)
    ts.set_auto_commit(False)
    
    query = ts.query("select * where attr = '"+specifiedAttr+"'")
    rs = query.fetch(True)
    
    if rs.has_next():
        data = idx_rs.next()
        rs.remove(data[0])
        rs.commit()