regression from 6.0.1 to 6.0.2 / numeric / executemany / setinputsizes: "expecting float" · Issue #75 · oracle/python-cx_Oracle (original) (raw)

the changes related to numeric have broken existing behavior for executemany():

import cx_Oracle
import decimal

conn = cx_Oracle.connect(
    user="scott",
    password="tiger",
    dsn=cx_Oracle.makedsn(
        "oracle1120", 1521, sid="xe",
    )
)

cursor = conn.cursor()


cursor.execute("""
CREATE TABLE t (
    x NUMERIC(10, 2)
)
""")
try:
    # works
    cursor.setinputsizes(x=cx_Oracle.NUMBER)
    cursor.execute(
        "INSERT INTO t (x) VALUES (:x)",
        x=decimal.Decimal("25.8")
    )

    # fails: "expecting float"
    cursor.setinputsizes(x=cx_Oracle.NUMBER)
    cursor.executemany(
        "INSERT INTO t (x) VALUES (:x)",
       [{"x": decimal.Decimal("25.8")}, {"x": decimal.Decimal("30.0")}]
    )

finally:
    cursor = conn.cursor()
    cursor.execute("DROP TABLE t")
    cursor.close()

with cx_oracle 6.0.2:

Traceback (most recent call last):
File "test.py", line 32, in
[{"x": decimal.Decimal("25.8")}, {"x": decimal.Decimal("30.0")}]
TypeError: expecting float

succeeds with oracle 6.0.1