我正在尝试使用SQLAlchemy从python调用PostGreSQL函数:该函数看起来像:
CREATE OR REPLACE FUNCTION insert_all(ID1 VARCHAR(20), ID2 VARCHAR(20),
trans_00 VARCHAR(1000), trans_1G VARCHAR(1000), trans_1S VARCHAR(1000),
cont VARCHAR(1000), fr VARCHAR(1000), hasmod VARCHAR(1), act_ch FLOAT,
cat_ch VARCHAR(2), count INT RETURNS void AS $$
...
END;
$$ LANGUAGE plpgsql;
在python中,我尝试过:
_upload={'ID1':linesplit[0], 'ID2':linesplit[1], 'trans_00':linesplit[2],
'trans_1G':linesplit[3], 'trans_1S':linesplit[4],
'cont':linesplit[5], 'fr':linesplit[6], 'hasmod':linesplit[7],
'act_ch':linesplit[8], 'cat_ch':linesplit[9], 'count':linesplit[10]}
a=self.connection.execute(sqlalchemy.text('select
insert_all(:ID1, :ID2, :trans_00, :trans_1G, :trans_1S, :cont, :fr,
:hasmod, :act_ch, :cat_ch, :count) from dual'), _upload)
我得到的错误:
sqlalchemy.exc.InvalidRequestError: A value is required for bind parameter '1' (Background on this error at: http://sqlalche.me/e/cd3x)
您是否认为可以进行批量插入(而不是使用_upload={...}
和_upload.append({...})
一次插入更多行)?
答案 0 :(得分:-1)
您是否尝试过使用sqlalchemy中的func方法。它对我有用:
from sqlalchemy.sql.expression import func
a = session.execute(func.your_schema.insert_all(*_upload.values()))