import socket
import cx_Oracle
szUsername = 'soctt'
szPasswd = 'tiger'
szHostname = '1234456577.com.cn'
szPort = '1521'
szInstance = 'orcl'
sql = 'select * from emp'
szIPAddr = socket.getaddrinfo(szHostname, None)[0][4][0]
db = cx_Oracle.connect(szUsername, szPasswd, szIPAddr + ':' + szPort + '/' + szInstance)
cursor = db.cursor()
cursor.execute(sql)
titles = [i[0] for i in cursor.description]
sqlRet = cursor.fetchall()
for title in titles:
print(title, end = "\t\t")
print("")
for sqlLine in sqlRet:
for line in sqlLine:
print(line, end = "\t\t")
print('')
cursor.close()
db.close()
PS D:\Desktop\FTP\python\python3\oracle> F:\Python\Python36-32\python.exe test.py
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
7369 SMITH CLERK 7902 1980-12-17 00:00:00 800.0 None 20
7499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600.0 300.0 30
7521 WARD SALESMAN 7698 1981-02-22 00:00:00 1250.0 500.0 30
7566 JONES MANAGER 7839 1981-04-02 00:00:00 2975.0 None 20
7654 MARTIN SALESMAN 7698 1981-09-28 00:00:00 1250.0 1400.0 30
7698 BLAKE MANAGER 7839 1981-05-01 00:00:00 2850.0 None 30
7782 CLARK MANAGER 7839 1981-06-09 00:00:00 2450.0 None 10
7788 SCOTT ANALYST 7566 1987-04-19 00:00:00 3000.0 None 20
7839 KING PRESIDENT None 1981-11-17 00:00:00 5000.0 None 10
7844 TURNER SALESMAN 7698 1981-09-08 00:00:00 1500.0 0.0 30
7876 ADAMS CLERK 7788 1987-05-23 00:00:00 1100.0 None 20
7900 JAMES CLERK 7698 1981-12-03 00:00:00 950.0 None 30
7902 FORD ANALYST 7566 1981-12-03 00:00:00 3000.0 None 20
7934 MILLER CLERK 7782 1982-01-23 00:00:00 1300.0 None 10
备注:cx_Oracle这个包无法识别域名,所以调用一下socket包把域名解析成IP地址,否则会报TNS错误。
备注:用的python3.6
参考文章:
《精通 Oracle+Python,第 1 部分:查询最佳应践》 http://www.oracle.com/technetwork/cn/articles/dsl/prez-python-queries-101587-zhs.html