Hello Team,

I tried to create a standalone application POC for sqlalchemy to db 
connection. When I registered do_connect event, I see event is triggered 
couple of times for one call:
*sqlalchemy_connection.py*

import os
import cx_Oracle
from sqlalchemy import create_engine
from sqlalchemy import event

cx_Oracle.init_oracle_client(lib_dir=os.environ.get("HOME") + 
"/Downloads/instantclient_19_8")
SQLALCHEMY_CONN = "test"
count = 0
engine = None
def connect_db(pwd):
global count
global engine
print(SQLALCHEMY_CONN)
username = "ADMIN"
password = pwd
dsn = "pydidb_high"
engine = create_engine(
f'oracle://{username}:{password}@{dsn}/?encoding=UTF-8&nencoding=UTF-8', 
max_identifier_length=128)
setup_event_handlers(engine)

def setup_event_handlers(engine):
@event.listens_for(engine, 'do_connect')
def receive_do_connect(dialect, conn_rec, cargs, cparams):
print("inside do_connect")
global count
try:
with engine.connect() as conn:
print("inside do_connect try block")
print(conn.scalar("select sysdate from dual"))
count += 2
except Exception as e:
print("inside do_connect except block")
count += 1

def db_connect_test():
print(engine)
with engine.connect() as conn:
print(conn.scalar("select sysdate from dual"))

*gevent_sync.py*

import gevent
import random
import sqlalchemy_connection

def task(pid):
gevent.sleep(random.randint(0,2)*0.001)
print('Task %s done' % pid)
sqlalchemy_connection.connect_db(**********)
sqlalchemy_connection.db_connect_test()

def synchronous():
for i in range(1,2):
task(i)
# sqlalchemy_connection.connect_db(**********)

def asynchronous():
threads = [gevent.spawn(task, i) for i in range(2)]
gevent.joinall(threads)

print('Synchronous:')
synchronous()
print('count %s ' % sqlalchemy_connection.count)

# print('Asynchronous:')
# asynchronous()
# print('count %s' % sqlalchemy_connection.count)

*Output:*

Synchronous:
Task 1 done
test
Engine(oracle://ADMIN:***@pydidb_high/?encoding=UTF-8&nencoding=UTF-8)
inside do_connect
inside do_connect
inside do_connect
inside do_connect
inside do_connect
inside do_connect
inside do_connect
inside do_connect
inside do_connect
inside do_connect
inside do_connect
inside do_connect
inside do_connect
inside do_connect
inside do_connect
inside do_connect except block
inside do_connect try block
2022-03-21 04:39:47
inside do_connect try block
2022-03-21 04:39:49
inside do_connect try block
2022-03-21 04:39:51
inside do_connect try block
2022-03-21 04:39:54
inside do_connect try block
2022-03-21 04:39:56
inside do_connect try block
2022-03-21 04:39:59
inside do_connect try block
2022-03-21 04:40:01
inside do_connect try block
2022-03-21 04:40:04
inside do_connect try block
2022-03-21 04:40:09
inside do_connect try block
2022-03-21 04:40:15
inside do_connect try block
2022-03-21 04:40:17
inside do_connect try block
2022-03-21 04:40:19
inside do_connect try block
2022-03-21 04:40:21
inside do_connect try block
2022-03-21 04:40:24
2022-03-21 04:40:26
count 29

highly appreciate any inputs.
Regards,
Pydi

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sqlalchemy/08096636-06c4-478f-a54d-0bc8f71db414n%40googlegroups.com.

Reply via email to