【发布时间】:2015-01-07 12:05:16
【问题描述】:
我正在开发一个带有 Postgres SQL 数据库的 Django 项目。我写了一个在 Postgres 上完美运行的存储过程。
现在我想从 Django 1.5 中调用该存储过程。我已经编写了代码,但它会提示错误。
CREATE FUNCTION fn_save_message3(IN msg_sub character varying, IN msg_cont text, IN msg_type character varying, IN msg_category character varying, IN msg_created_by character varying, IN msg_updated_by character varying) RETURNS integer AS
$BODY$ DECLARE msg_id integer := 0;
BEGIN
INSERT INTO tbl_messages
(message_subject, message_content, message_type, message_category,
created_on, created_by, updated_on, updated_by)
VALUES
(msg_sub, msg_cont, msg_type, msg_category, LOCALTIMESTAMP,
msg_created_by, LOCALTIMESTAMP, msg_updated_by);
Select into msg_id currval('tbl_messages_message_id_seq');
return msg_id;
END;$BODY$
LANGUAGE plpgsql VOLATILE NOT LEAKPROOF
COST 100;
ALTER FUNCTION public.fn_save_message(IN character varying, IN text, IN character varying, IN character varying, IN character varying, IN character varying)
OWNER TO gljsxdlvpgfvui;
存储过程没问题,它会返回结果。
c = connection.cursor()
try:
c.execute("BEGIN")
c.callproc("fn_save_message", [Message_Subject, Message_Content, Message_Type, Message_Category, Created_By, updated_by])
results = c.fetchone()
c.execute("COMMIT")
finally:
c.close()
print results
在您提出所有建议之后,我的程序终于可以正常工作了。但还剩下一个小问题。
因为我使用results = c.fetchone() 来获取输出参数。
它返回 (13,)
但我只想得到 13 作为字符串或整数,我怎样才能只得到值。
更新:
问题解决了
for item in results:
message_id = item
【问题讨论】:
-
缩进问题?我不相信这与 SQL 方面有任何关系。另外,请使用放置参数而不是字符串连接;见bobby-tables.com、en.wikipedia.org/wiki/SQL_injection、initd.org/psycopg/docs/…
-
为什么不在 Django ORM 中运行该代码?
标签: python django postgresql stored-procedures