Python cx_Oracle 的问号预处理语句

0 投票
1 回答
1603 浏览
提问于 2025-04-18 07:24

我正在尝试使用cx_Oracle这个库,但它似乎对我了解的数据库API不太满意。

以下这些语句可以正常工作:

cur.execute('INSERT INTO "testdboz" ("id", "sessionid") VALUES (2, 123)')
cur.execute('INSERT INTO "testdboz" ("id", "sessionid") VALUES (:id, :sid)', 
            {'id':1, 'sid':13})
cur.execute('INSERT INTO "testdboz" ("id", "sessionid") VALUES (:1, :2)', [1123, 123])

但是,这个就失败了:

cur.execute('INSERT INTO "testdboz" ("id", "sessionid") VALUES (?, ?)', [1, 123])

上面的代码失败是因为:

---------------------------------------------------------------------------
DatabaseError                             Traceback (most recent call last)
<ipython-input-17-4e9fe350f968> in <module>()
----> 1 cur.execute('INSERT INTO "testdboz" ("id", "sessionid") VALUES (?, ?)', [1, 123])

DatabaseError: ORA-01036: illegal variable name/number

有没有办法修正这个语句呢?cx_Oracle支持qmark这种写法吗?

1 个回答

0

很遗憾,我在这里找到了一个答案...

你其实不能完全选择你想用的参数风格。Oracle数据库只原生支持命名参数和数字参数风格,而cx_Oracle这个库支持这两种。

撰写回答