python - psycopg2 连接错误:不能将超过 100 个参数传递给函数?
问题描述
我正在尝试将 json 对象作为参数传递给我的存储过程。我尝试了很多事情并解决了几个错误 atlast 我被这个错误困住了“psycopg2 连接错误:不能将超过 100 个参数传递给一个函数”我尝试了 json.dumps 它给了我这个..如果我从脚本执行相同的输入它工作正常。下面是我的存储过程..
CREATE OR REPLACE PROCEDURE public.insert_usr_details_in_all_tables (jsonobject json)
LANGUAGE 'plpgsql'
AS $BODY$
DECLARE
skill_s Text[] := '{}';
selectedSkill TEXT;
edu TEXT;
email TEXT;
phone TEXT;
usr_name TEXT;
clg TEXT;
lstEmployer TEXT;
gendr TEXT;
skill_row_count INTEGER;
usr_id INTEGER;
skl_id INTEGER;
intEmailExist INTEGER;
expen DECIMAL;
BEGIN
-- Getting name
SELECT jsonobject->'Name' into usr_name;
-- Getting education
SELECT jsonobject->'Education' into edu;
-- Getting phone number
SELECT jsonobject->'phone_number' into phone;
-- Getting experience
SELECT (jsonobject->>'Exp')::DECIMAL INTO expen;
--Getting college
SELECT jsonobject->'College' into clg;
-- Getting last employer
SELECT jsonobject->'CurrentEmployer' into lstEmployer;
--Getting gender
SELECT jsonobject->'Gender' into gendr;
-- Getting Email
SELECT json_array_length(jsonobject->'Email') into intEmailExist;
IF intEmailExist > 0 THEN
email:=array(SELECT json_array_elements_text(jsonobject->'Email'));
END IF;
-- Insert user details in 'Extractor_usr_details' table.
INSERT INTO public."Extractor_usr_details"(name, phone_number, email, exp, education, college, "currentEmployer", gender)VALUES ( usr_name, phone, email, expen, edu, clg, lstEmployer, gendr) returning "id" into usr_id;
skill_s := array(SELECT json_array_elements_text(jsonObject->'Skills'));
FOREACH selectedSkill IN ARRAY skill_s LOOP
INSERT INTO public."Extractor_skills" (skill) SELECT selectedSkill WHERE NOT EXISTS (SELECT id FROM public."Extractor_skills" WHERE skill = selectedSkill)RETURNING id into skl_id;
INSERT INTO public."Extractor_usr_skills" (skill_id, user_id) SELECT skl_id, usr_id WHERE NOT EXISTS (SELECT id FROM public."Extractor_usr_skills" WHERE skill_id = skl_id AND user_id = usr_id);
END LOOP;
COMMIT;
END;
$BODY$;
这是我在python项目中调用存储过程的代码
try:
# declare a new PostgreSQL connection object
conn = connect(
dbname="postgres",
user="postgres",
host="localhost",
password="demo",
port= '5432'
# attempt to connect for 3 seconds then raise exception
)
cur = conn.cursor()
cur.callproc('insert_usr_details_in_all_tables', json.dumps(jsonObject))
except (Exception) as err:
print("\npsycopg2 connect error:", err)
conn = None
cur = None
解决方案
推荐阅读
- android - 在 App 模块中接收库模块发送的广播
- django - 如何在 Django 模型中使用@property?
- eclipse - 是否可以将我自己的自定义控件或组合放在 Jface 的列表查看器中
- excel - 我将如何自动更新在 excel 中有链接并具有 vba 代码的 powerpoint 中的多张幻灯片?
- php - 如果价值为 0 wooCommerce 包括产品变化,有没有办法使销售价格为空
- visual-studio-mac - 如何使用快捷方式在 Visual Studio for Mac 上打开 IntelliSense
- c++ - Why is size_type in std::array size_t and in std::vector usually size_t?
- laravel - Laravel 6:试图获取非对象的属性
- ios - Read Apple crash reports without OS
- java - Linked List Testing....Return type issue