0

我正在使用 TxPostgres 在 postgresql 中插入一行,我的存储过程是

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.runQuery返回Deferred将包含查询结果的 a。

当您Deferred从回调返回时,下一个回调值将是 txpostgres Deferred 的值。因此,您可以在之前的回调之后编写:

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