连接oracle数据库查询与封装调用----结果集打印(结果对应字段名与表格形式)
1、连接oracle
1.1 安装 cx_Oracle
(1)下载cx_Oracle:
需保证系统版本,python版本,oracle客户端的版本,cx_Oracle的版本的一致性。oracle客户端的版本,cx_Oracle的版本,要与Python版本和位数对应。
Python版本:Python3.4.3 32位;
cx_Oracle的版本:cx_Oracle-5.2-11g.win32-py3.4
oracle客户端的版本:instantclient-basic-win32-11.2.0.1.0;
这里还有三个注意点:
版本位数对应,都是32位;
cx_Oracle和python版本对应,都是3.4;
cx_Oracle和instantclient版本对应,都是11;
(2)查看Python版本:win+R——cmd——python
(3)安装cx_Oracle:pip install cx-Oracle
或者去官网下载安装:https://pypi.org/project/cx-Oracle/#files
(4)下载地址:http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html
把下载的文件解压,复制oci.dll,oraocci11.dll,oraociei11.dll的3个DLL粘贴到你的python安装目录的Libs/site-packages文件夹下面。
1.2 连接oracle数据库
import cx_Oracle #导入oracle数据库
class ReadDB:
# 定义连接对象,类方法
conn=None
#指定数据库配置文件
dsn = open(r'D:\PLSQL Developer\instantclient\instantclient_11_3\NETWORK\ADMIN\tnsnames.ora')
# 获取连接对象方法封装
def get_conn(self):
if self.conn is None:
self.conn = cx_Oracle.connect(user="登录名",
password="密码password",
dsn="ORACLE_40.31",
encoding="UTF-8")
return self.conn # 返回连接对象
2、打印数据库查询结果集
2.1 值嵌入字段名
def get_sql_one(self, sql,params):
# 定义游标对象及数据变量
sursor = None
data = None
try:
# 获取游标对象
sursor = self.get_cursor()
# 调用执行方法
sursor.execute(sql,params)
# 获取结果
data = sursor.fetchone()
#-------输出结果加入字段名
des=sursor.description # 获取表详情,字段名,长度,属性等
t=",".join([item[0] for item in des])
table_head = t.split(',') # # 查询表列名 用,分割
dict_result = dict(zip(table_head,data)) # 打包为元组的列表 再转换为字典
list_result = []
list_result.append(dict_result) # 将字典添加到list_result中
print( "查询结果如下:\n", list_result, end='\n')
except Exception as e:
print("get_sql_one error:", e)
finally:
# 关闭游标对象
self.close_cursor(sursor)
# 关闭连接对象
self.close_conn()
# 返回执行结果
return list_result
2.2 结果集显示为列表
2.2.1 安装pandas:
pip install --upgrade --user --default-timeout=1500 pandas(python安装目录下)
import pandas
# ------------------------获取所有数据结果集-------------------------
def get_sql_all(self, sql,params):
# 定义游标对象及数据变量
global table_head
sursor = None
data = None
data_count = 0
try:
# 获取游标对象
sursor = self.get_cursor(