我是这样使用sqlalchemy和cx_oracle的:
from sqlalchemy import create_engine
import cx_Oracle
host="myhost"
port=myport
sid='myservicename'
user='myuser'
password='mypassword'
sid = cx_Oracle.makedsn(host, port, service_name=sid)
cstr = 'oracle://{user}:{password}@{sid}'.format(
user=user,
password=password,
sid=sid
)
engine = create_engine(
cstr,
convert_unicode=False,
pool_recycle=10,
pool_size=50,
echo=True,
max_identifier_length=128
)
result = engine.execute('select * from dual')
for row in result:
print (row)
C:\python>python mytest_sql.py
2020-08-12 14:14:12,136 INFO sqlalchemy.engine.base.Engine SELECT USER FROM DUAL
2020-08-12 14:14:12,137 INFO sqlalchemy.engine.base.Engine {}
2020-08-12 14:14:12,192 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS VARCHAR(60 CHAR)) AS anon_1 FROM DUAL
2020-08-12 14:14:12,192 INFO sqlalchemy.engine.base.Engine {}
2020-08-12 14:14:12,247 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS VARCHAR2(60 CHAR)) AS anon_1 FROM DUAL
2020-08-12 14:14:12,248 INFO sqlalchemy.engine.base.Engine {}
2020-08-12 14:14:12,303 INFO sqlalchemy.engine.base.Engine SELECT CAST('test nvarchar2 returns' AS NVARCHAR2(60)) AS anon_1 FROM DUAL
2020-08-12 14:14:12,304 INFO sqlalchemy.engine.base.Engine {}
2020-08-12 14:14:12,383 INFO sqlalchemy.engine.base.Engine select value from nls_session_parameters where parameter = 'NLS_NUMERIC_CHARACTERS'
2020-08-12 14:14:12,383 INFO sqlalchemy.engine.base.Engine {}
2020-08-12 14:14:12,490 INFO sqlalchemy.engine.base.Engine select * from dual
2020-08-12 14:14:12,492 INFO sqlalchemy.engine.base.Engine {}
('X',)
C:\python>