0

Postgresql に行を挿入するために TxPostgres を使用しています。私のストアド プロシージャは

CREATE OR REPLACE FUNCTION gps_open_connection(
    _ip character varying(15),
    _port integer
) RETURNS integer AS $$ 
DECLARE
    log_id integer;
BEGIN
    INSERT INTO gpstracking_device_logs (gpstracking_device_logs.id, gpstracking_device_logs.ip, gpstracking_device_logs.port, gpstracking_device_logs.status, gpstracking_device_logs.created, gpstracking_device_logs.updated) VALUES (DEFAULT, _ip, _port, TRUE, NOW(), NOW()) RETURNING id INTO log_id;
END
$$ 
LANGUAGE plpgsql VOLATILE SECURITY DEFINER;

このストアド プロシージャはねじれたクラスのメソッドから呼び出されます。私のメソッドは

def openConnection (self, ip, port):
        self.connection['ip'] = ip
        self.connection['port'] = port
        self.connection['status'] = True 
        self._d.addCallback(lambda _: self._conn.runQuery("select gps_open_connection('%s', '%s')" % (ip, port)))
        self.id ?

私の問題は、self.id の入力方法がわからないことです。この問題についてお役に立てば幸いです

4

1 に答える 1

2

self._conn.runQueryDeferredクエリ結果を含む を返します。

コールバックからこれを返すDeferredと、次のコールバック値は txpostgres Deferred の値になります。したがって、前のコールバックの直後に次のように記述できます。

def setId(val):
   self.id = val[0]['id']
self._d.addCallback(setId)
于 2013-06-20T13:53:20.870 に答える