我基本上试图运行以下查询。在自定义的sql语句中。
CREATE TEMPORARY TABLE input (
id serial, certified boolean
);
INSERT INTO input (id, certified) VALUES (DEFAULT, True), (DEFAULT, False), (DEFAULT, True), (DEFAULT, False), (DEFAULT, True), (DEFAULT, False);
CREATE OR REPLACE FUNCTION update_record(_input input)
RETURNS input AS $$
UPDATE "tests_person"
SET certified=_input.certified
WHERE certified=_input.certified
RETURNING _input.id, _input.certified
$$ LANGUAGE SQL;
WITH new_updated AS (
SELECT upd.*
FROM input, update_record(input) as upd
WHERE upd.id is not NULL
),
except_updated AS (
SELECT * FROM input
EXCEPT ALL
SELECT * FROM new_updated
)
SELECT id, certified FROM except_updated;
该代码如下所示。
from django.db import connections
sql = '''the above sql code'''
with connection.cursor() as cursor:
cursor.execute(sql)
row = cursor.fetchone()
sql完全没有错误。但是当试图获取一行时,即使应该有结果也没有结果。我在这里有一个相同的sql:http://sqlfiddle.com/#!17/48a30/75在小提琴中我得到了最后一个select语句的一些结果:SELECT id, certified FROM except_updated;
因此,当我在django中尝试这一点时,不确定为什么事情会有所不同。为了记录,我使用了postgres 9.6和django 1.11。