Skip to content

Instantly share code, notes, and snippets.

@andy-slac
Last active October 24, 2019 22:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save andy-slac/5faba2e45196dc7f82609c28c397ebbd to your computer and use it in GitHub Desktop.
Save andy-slac/5faba2e45196dc7f82609c28c397ebbd to your computer and use it in GitHub Desktop.
Testing INSERT ... RETURNING with executemany() in cx_Oracle
#!/usr/bin/env python3
import cx_Oracle
def main():
db = cx_Oracle.connect(dsn="gen3_cred_salnikov")
cur = db.cursor()
data = [dict(val1=1, val2=10),
dict(val1=2, val2=20),
dict(val1=3, val2=30)]
IdArr = cur.var(int, arraysize=len(data))
print(f"IdArr = {IdArr} @{id(IdArr)}")
cur.setinputsizes(ret_0=IdArr)
print("pre-execute cursor.bindvars = ", cur.bindvars)
cur.executemany("insert into test_table_ret (id, val1, val2) "
"values (test_table_ret_id_seq.nextval, :val1, :val2) "
"returning id into :ret_0", data)
bindvars = cur.bindvars
print("post-execute cursor.bindvars = ", bindvars)
print(f"ret_0 = {bindvars['ret_0']} @{id(bindvars['ret_0'])}")
for ix, datum in enumerate(data):
print("Data: " , datum, "ID: ", IdArr.getvalue(ix))
if __name__ == "__main__":
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment