我使用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,我希望你可以帮助解决这个问题
答案 0 :(得分:2)
self._conn.runQuery
会返回包含查询结果的Deferred
。
当您从回调中返回此Deferred
时,下一个回调值将是txpostgres Deferred的值。所以,你可以在之前的回调之后写一下:
def setId(val):
self.id = val[0]['id']
self._d.addCallback(setId)