я не нашел способ вернуть данные из функции Postgres, которые возвращают таблицу:Использование SQLAlchemy как вызвать функцию, которая возвращает таблицу
CREATE OR REPLACE FUNCTION doc_codes(device_id TEXT) RETURNS TABLE("name" TEXT, "suffix" TEXT) AS $$
SELECT name, prefix_fordevice(name, device_id) AS pf FROM doccode;
$$ LANGUAGE SQL;
Использование:
f = sq.sql.text("SELECT name, suffix FROM doc_codes(:deviceId)")
return self.con.execute(f, deviceId=deviceId)
Или
f = sq.sql.func.doc_codes(deviceId, type_=types.String)
return self.con.execute(
select([sq.Column('name', types.String), sq.Column('suffix', types.String)]). \
select_from(f)
).fetchall()
Я получаю ошибку (ProgrammingError) a column definition list is required for functions returning "record"
.
Использование f = sq.sql.func.doc_code(deviceId, type_=types.String)
Я получаю No function matches the given name and argument types. You might need to add explicit type casts
и сгенерировано SQL is SELECT doc_code('1') AS doc_code_1
, а не SELECT * FROM
.
Если вы создаете таблицу, я не могу передать deviceId в имя таблицы ... теперь, что я могу сделать?
Вы * уверен * вы определили вашу функцию как 'RETURNS TABLE (...)' 'не ВОЗВРАЩЕНИЕ SETOF RECORD'? –
Damm, вот и все. Код в БД не был обновлен. Однако, как это сделать с помощью SET OF RECORD? – mamcx