当我们使用外部授权(如带有TNS(网络服务名称)的钱包)时,如何使用SqlAlchemy连接类似于cx_oracle的数据库

2024-09-29 19:20:30 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑下面的代码: 现在,下面的工作

connection = cx_Oracle.connect(dsn = 'DSNAME')

但是当我使用下面的SqlAlchemy格式时,它不起作用,我得到TypeError: Invalid arguments dsn passed

connection = create_engine('oracle+cx_oracle://' , dsn = 'DSNAME')

Tags: 代码sqlalchemy格式connectcreateconnectionargumentsoracle
2条回答

SQLAlchemy需要一个数据库连接URI,在their documentation上有一篇关于它的文章。它需要格式

oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]

你试过以下方法吗

connection = create_engine('oracle+cx_oracle://' + 'DSNAME')

这似乎是一篇很老的文章,我尝试了下面的代码,它很有效。希望这有帮助。提供空用户名/密码时,从钱包中读取,位置在sqlnet.ora中提到

tnsnames.ora:

t1=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ip)(PORT=1521)(KEY=dbpdb1))(CONNECT_DATA=(SERVICE_NAME=dbsvc1.oracle.com)))

sqlnet.ora:

钱包位置= (来源)= (方法=文件) (b)数据的方法= (目录=$walletdir) ) ) SQLNET.WALLET\u OVERRIDE=TRUE

from sqlalchemy import create_engine
cstr='oracle://:@t1'
print(cstr)
engine = create_engine(
        cstr,
        convert_unicode=False,
        echo=True
        )
s='select * from emp'
conn = engine.connect()
result = conn.execute(s)
for row in result:
    print (row)

相关问题 更多 >

    热门问题