txpostgres从存储过程返回最后一个插入

时间:2013-06-18 23:16:02

标签: python postgresql twisted

我使用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,我希望你可以帮助解决这个问题

1 个答案:

答案 0 :(得分:2)

self._conn.runQuery会返回包含查询结果的Deferred

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

def setId(val):
   self.id = val[0]['id']
self._d.addCallback(setId)