hi,
for the background, pls refer to this link.
https://bitbucket.org/zzzeek/sqlalchemy/issue/3384/how-to-generate-complicated-nested-sql
I just follow Mike's suggestion, that is, only send sql templates and
json/hstore/string/datetime objects to database instead of raw SQL
statements. (if i understand it correctly. pls correct me if i am wrong)
the stored procedure function(only for testing) and test script are:
http://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-QUOTE-LITERAL-EXAMPLE
select test_upsert_operation('update app set name=%L where app_id=%L',
VARIADIC ARRAY['upsert-sub-pgsql-again', '2']);
CREATE OR REPLACE FUNCTION test_upsert_operation(update_exprssion text,
variadic params text[]) RETURNS VOID AS
$$
BEGIN
-- execute format('update app set name=%L where app_id=%L',
'upsert-sub-pgsql', 2);
execute format(update_exprssion, VARIADIC params);
END;
$$
LANGUAGE plpgsql;
The problem is that
1. the number of objects sent to stored procedure is not fixed,
2. they have different data types, string/datetime/jsonb/hstore, etc. BUT
variadic
only accept the same type[1] (even if for anyarray, anyelment etc [2])
[1]
http://www.postgresql.org/docs/9.4/static/xfunc-sql.html#XFUNC-SQL-VARIADIC-FUNCTIONS
[2] http://www.postgresql.org/docs/current/static/extend-type-system.html
Any tips for this function declaration so that we can pass objects to the
stored procedure and do the formatting for escape literals???
thx again.
wenlong
--
You received this message because you are subscribed to the Google Groups
sqlalchemy group.
To unsubscribe from this group and stop receiving emails from it, send an email
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.