CX_Oracle使用绑定变量/函数插入数据并返回记录ID

阿努拉格·帕塔纳亚克(Anurag Pattanayak)

我正在尝试使用cx_oracle创建一个定义,以将数据插入数据库并返回记录ID。我搜索了该论坛,并找到了以下解决方案。

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)")

这工作正常,我能够获得ID。但是我想通过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语句以获取ID,如果执行以下操作,则会出错

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”。

克里斯托弗·琼斯

使用cx_Oracle 7.3,可以Cursor.lastRowid在执行INSERT之后访问请参阅cx_Oracle示例LastRowid.py

cursor = connection.cursor()
cursor.execute("insert into mytab (id, data) values (:1, :2)", [1, "First"])
print("Rowid 1:", cursor.lastrowid)

否则,请使用您正在查看的RETURNING INTO子句。https://cx-oracle.readthedocs.io/en/latest/user_guide/bind.html#dml-returning-bind-variables上有一个RETURNING INTO示例

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用绑定时,cx_Oracle返回空查询

Python cx_Oracle绑定变量

如何通过熊猫数据帧在cx_Oracle中使用命名绑定和批量插入(executemany)

使用 cx_Oracle executemany() 从 Python 列表/字典批量插入 Oracle 数据库

Python cx_oracle绑定变量和项目列表

python cx_Oracle绑定非法变量名

使用cx_Oracle中csv文件中的变量更新数据库

使用cx_Oracle从Oracle提取数据时,返回空字符串代替Oracle NULL / Python无

cursor.fetchall() 使用 cx_Oracle 返回空元组

使用Python设置cx_Oracle环境变量

ORA-01036 错误,当用 cx_oracle 绑定变量时

Python 使用 cx_Oracle 在 Oracle BD 中导入/插入 CSV(无标题)

用cx_Oracle批量插入:数据类型不一致

无法使用 sqlalchemy/cx_oracle 中的绑定参数创建表

使用 cx_Oracle Cursor.executemany() 插入序列的下一个值

Python Cx_Oracle; 如何使用列表作为参数执行 SQL 插入

在cx_oracle上使用多个主机

使用运行Oracle单记录更新/插入的绑定变量是否有优势?

使用python连接到Oracle数据库(cx_oracle)

如何使用cx_oracle django软件包连接到Oracle旧版数据库?

使用python cx_oracle将数据导入到oracle

对于cx_Oracle,在Python中将日期绑定到SQL

数据库:使用cx_oracle通过python检查数据类型

Python CX_Oracle:如何在另一个查询中使用返回的元组

如何使用python和cx_Oracle更新oracle表中的列并在每次记录更新后提交

在cx_Oracle中调用自定义函数

Python ETL-使用cx_Oracle批量或迭代将大型数据集加载到Oracle数据库中

在cx_Oracle / sqlalchemy中反映数据库表

通过 cx_Oracle 从用户定义的类型中提取数据