Я пытаюсь создать определение, используя cx_ oracle, чтобы вставить данные в базу данных и получить идентификатор записи. Я искал форум и нашел решение, как показано ниже.
def insert_data(self,SqlQry):
try:
idvar=self.__cursor.var(cx_Oracle.NUMBER)
SqlQry=SqlQry + " returning ID into :vrecord_id"
self.__cursor.execute(SqlQry,v1='test1',v2='test2',v3='test3',v4='test4', vrecord_id=idvar)
vid= idvar.getvalue()
self.__con.commit()
retuen vid
except cx_Oracle.DatabaseError as e:
return e
print("Error in data insert")
print(sql_insertData("INSERT INTO MYTABLE(Field1,Field2,Field3,Field4) VALUES(:v1, :v2, :v3,:v4)")
Это отлично работает, и я могу получить идентификатор. Но я хочу передать значения с помощью оператора sql вместо определения каждого по отдельности, как я это сделал в строке .execute.
cursor.execute(SqlQry,v1='test1',v2='test2',v3='test3',v4='test4', vrecord_id=idvar)
Я хочу изменить текущий оператор печати следующим образом:
print(sql_insertData(
"""INSERT INTO RAP_RISK_TYPE(RISK_HEADER,RISK_TYPE_DISP,RISK_TYPE_DESC,RISK_TYPE_CAT)
VALUES
(:v1, :v2, :v3,:v4)""", ['newvalue1','newvalue2','newvalue3','newvalue4']
Но если я делаю это, как я пишу инструкцию execute для получения идентификатора, я получаю ошибку, если я делаю следующее
def insert_data(self,SqlQry,parm):
try:
idvar=self.__cursor.var(cx_Oracle.NUMBER)
SqlQry=SqlQry + " returning ID into :vrecord_id"
self.__cursor.execute(SqlQry,parm, vrecord_id=idvar)
vid= idvar.getvalue()
self.__con.commit()
retuen vid
except cx_Oracle.DatabaseError as e:
return e
print("Error in data insert")
print(sql_insertData(
"""INSERT INTO RAP_RISK_TYPE(RISK_HEADER,RISK_TYPE_DISP,RISK_TYPE_DESC,RISK_TYPE_CAT)
VALUES
(:v1, :v2, :v3,:v4)""", ['newvalue1','newvalue2','newvalue3','newvalue4']
Я не могу передать список из оператора печати и добавьте «idvar» одновременно.