# This script requires cx_Oracle 8.2 and higher. #------------------------------------------------------------------------------ import cx_Oracle as oracledb import sample_env QUEUE_NAME = "DEMO_RAW_QUEUE" PAYLOAD_DATA = [ "The first message", "The second message", "The third message", "The fourth and final message" ] # connect to database connection = oracledb.connect(sample_env.get_main_connect_string()) cursor = connection.cursor() # create queue queue = connection.queue(QUEUE_NAME) queue.deqoptions.wait = oracledb.DEQ_NO_WAIT queue.deqoptions.navigation = oracledb.DEQ_FIRST_MSG # dequeue all existing messages to ensure the queue is empty, just so that # the results are consistent while queue.deqone(): pass # enqueue a few messages print("Enqueuing messages...") for data in PAYLOAD_DATA:
# cx_Oracle. It makes use of a RAW queue created in the sample setup. # # This script requires cx_Oracle 7.2 and higher. #------------------------------------------------------------------------------ import cx_Oracle import sample_env QUEUE_NAME = "DEMO_RAW_QUEUE" PAYLOAD_DATA = [ "The first message", "The second message", "The third message", "The fourth and final message" ] # connect to database connection = cx_Oracle.connect(sample_env.get_main_connect_string()) cursor = connection.cursor() # create queue queue = connection.queue(QUEUE_NAME) queue.deqOptions.wait = cx_Oracle.DEQ_NO_WAIT queue.deqOptions.navigation = cx_Oracle.DEQ_FIRST_MSG # dequeue all existing messages to ensure the queue is empty, just so that # the results are consistent while queue.deqOne(): pass # enqueue a few messages print("Enqueuing messages...") for data in PAYLOAD_DATA:
def cursor(self): return Cursor(self) class Cursor(cx_Oracle.Cursor): def execute(self, statement, args = None): prepare_needed = (self.statement != statement) result = super(Cursor, self).execute(statement, args or []) if prepare_needed: description = self.description if description: names = [d[0] for d in description] self.rowfactory = collections.namedtuple("GenericQuery", names) return result # create new subclassed connection and cursor connection = Connection(sample_env.get_main_connect_string()) cursor = connection.cursor() # the names are now available directly for each query executed for row in cursor.execute("select ParentId, Description from ParentTable"): print(row.PARENTID, "->", row.DESCRIPTION) print() for row in cursor.execute("select ChildId, Description from ChildTable"): print(row.CHILDID, "->", row.DESCRIPTION) print()
def __init__(self): connect_string = sample_env.get_main_connect_string() print("CONNECT to database") return super(Connection, self).__init__(connect_string)
# This script requires cx_Oracle 8.2 and higher. #------------------------------------------------------------------------------ import cx_Oracle as oracledb import sample_env STRING_VAL = 'I bought a cafetière on the Champs-Élysées' def return_strings_as_bytes(cursor, name, default_type, size, precision, scale): if default_type == oracledb.DB_TYPE_VARCHAR: return cursor.var(str, arraysize=cursor.arraysize, bypass_decode=True) with oracledb.connect(sample_env.get_main_connect_string()) as conn: # truncate table and populate with our data of choice with conn.cursor() as cursor: cursor.execute("truncate table TestTempTable") cursor.execute("insert into TestTempTable values (1, :val)", val=STRING_VAL) conn.commit() # fetch the data normally and show that it is returned as a string with conn.cursor() as cursor: cursor.execute("select IntCol, StringCol from TestTempTable") print("Data fetched using normal technique:") for row in cursor: print(row) print()