背景
之前写了一篇python采用jdbc连接kerberos认证的hive,本文是采用LDAP用户名和密码的方式连接Oracle,并且提供一种自动关闭游标和数据库连接的方式,方便使用;
方法
具体代码如下:
python
class OracleConn:
def __init__(self, username, password, url):
self.username = username
self.password =password
self.url = url
self.conn = None
self.cursor = None
def connect_oracle(self):
import jaydebeapi
self.conn = jaydebeapi.connect("oracle.jdbc.OracleDriver", self.url,
[self.username, self.password],
jars=["./oracle-driver-ojdbc.jar"]
)
self.cursor = self.conn.cursor()
def __enter__(self):
self.connect_oracle()
return (self.conn, self.cursor)
def __exit__(self, exc_type, exc_val, exc_tb):
if self.cursor is not None:
self.cursor.close()
if self.conn is not None:
self.conn.close()
采用如上的方式,我们创建了oracle的Conn和cursor,可以提供具体的代码;
ini
username=""
password=""
url=""
with OracleConn(username, password, url) as (conn,cursor):
cursor.execute("select * from xxx")
result=cursor.fetchall()
for r in result:
print(r)
采用这种方式,我们可以不用自己释放数据库连接,在程序执行完成之后自动释放; 需要注意的是,我们在执行连接时需要加载oracle的jdbc的jar包,正常情况下,使用jaydebeapi执行一个进程时,只加载一次jdbc的jar包,第二次加载不生效,因此如果一个程序中要同时连接两个不同类型的数据库,要加载两个不同的jdbc的jar包时,在第一次连接时就应该加载所有的jdbc jar包,不然连接第二种类型的数据库时会报错;