笺注:这是在 Navicat连接Oracle11gR2 的基础上进行的。
相关软件的下载链接:https://pan.baidu.com/s/1Bip6wckcZ8eEiMoJIii4lA 提取码:mwoi
Oracle Linux6.9安装Python3:
安装依赖软件包:(以本地光盘作为Yum源即可)
[root@oracle ~]# yum -y install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel wget gcc-c++ make
编译安装Python3:
tar -zxvf Python-3.6.8.tgz
mv Python-3.6.8 /usr/local/
cd /usr/local/Python-3.6.8/
./configure
make
make install
给新Python3创建新链接:
[root@oracle ~]# ln -s /usr/local/bin/python3.6 /usr/bin/python3
Python2和Python3实现共存了:
Oracle服务器连接公网安装第三方库(cx_Oracle):(可以指定软件的版本)
[root@oracle ~]# pip3 install cx_Oracle==8.0.1 -i http://mirrors.aliyun.com/pypi/simple --trusted-host=mirrors.aliyun.com
Looking in indexes: http://mirrors.aliyun.com/pypi/simple
Collecting cx_Oracle==8.0.1
Downloading http://mirrors.aliyun.com/pypi/packages/9f/ce/9117cc84d05800b7962f1842bf5fb20455ee08264cda052a3c79d476cf01/cx_Oracle-8.0.1-cp36-cp36m-manylinux1_x86_64.whl (756kB)
100% |████████████████████████████████| 757kB 4.3MB/s
Installing collected packages: cx-Oracle
Successfully installed cx-Oracle-8.0.1
[root@oracle ~]#
列出当前环境所有已经安装的第三方库的名称和其版本号:
[root@oracle ~]# pip3 freeze
cx-Oracle==8.0.1
[root@oracle ~]#
由此还可以得获得第三方库(cx_Oracle)的下载地址:(需要另外手动下载软件包)
[root@oracle ~]# wget http://mirrors.aliyun.com/pypi/packages/9f/ce/9117cc84d05800b7962f1842bf5fb20455ee08264cda052a3c79d476cf01/cx_Oracle-8.0.1-cp36-cp36m-manylinux1_x86_64.whl
软件包下载成功:
[root@oracle ~]# du -sh cx_Oracle-8.0.1-cp36-cp36m-manylinux1_x86_64.whl
740K cx_Oracle-8.0.1-cp36-cp36m-manylinux1_x86_64.whl
[root@oracle ~]#
######
例子一:
Oracle服务器本地测试与数据库连接的脚本:(/root/xx.py)
[root@oracle ~]# cat xx.py
#coding=utf-8
import cx_Oracle
def db_connect():
#本地连接数据库;使用数据库用户happy,数据库实例ORCL
db=cx_Oracle.connect('happy/mima@127.0.0.1:1521/ORCL')
cursor = db.cursor()
Sql_1 = "SELECT version FROM product_component_version WHERE substr(product, 1, 6) = 'Oracle'" #查看数据库版本信息
cursor.execute(Sql_1)
Result_1 = cursor.fetchone() #使用fetchone只能获取一个元素
print(Result_1)
print(type(Result_1))
print("-" * 10)
print(Result_1[0]) #输出元组的第一个元素
print("-" * 10)
print(f"数据库的版本信息:{Result_1[0]}")
db.close() #关闭数据库连接
def func_main():
try:
db_connect()
except Exception as e:
print(f"数据库连接失败,原因: {e}")
if __name__ == "__main__":
func_main()
脚本运行的结果:
[root@oracle ~]# python3 xx.py
数据库连接失败,原因: DPI-1047: Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or directory". See https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html for help
[root@oracle ~]#
根据提示登录网站查看文档,下载软件包:
https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html
安装相关RPM包(CentOS6/Redhat6要安装oracle-instantclient18.3-basic):
[root@oracle ~]# rpm -ivh oracle-instantclient18.3-basic-18.3.0.0.0-3.x86_64.rpm
warning: oracle-instantclient18.3-basic-18.3.0.0.0-3.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
Preparing... ########################################### [100%]
1:oracle-instantclient18.########################################### [100%]
[root@oracle ~]#
[root@oracle ~]# sudo sh -c "echo /usr/lib/oracle/18.3/client64/lib > /etc/ld.so.conf.d/oracle-instantclient.conf"
[root@oracle ~]#
[root@oracle ~]# cat /etc/ld.so.conf.d/oracle-instantclient.conf
/usr/lib/oracle/18.3/client64/lib
[root@oracle ~]#
[root@oracle ~]# sudo ldconfig
[root@oracle ~]#
脚本运行的结果:(连接成功时)
[root@oracle ~]# python3 xx.py
('11.2.0.1.0',)
<class 'tuple'>
----------
11.2.0.1.0
----------
数据库的版本信息:11.2.0.1.0
[root@oracle ~]#
脚本运行的结果:(因用户密码错误,连接失败时)
[root@oracle ~]# python3 xx.py
数据库连接失败,原因: ORA-01017: invalid username/password; logon denied
[root@oracle ~]#
######
数据库用户happy已有的表STU_01的表结构:
例子二:
Oracle服务器本地一次性插入多条记录的脚本:
[root@oracle ~]# cat xx.py
#coding=utf-8
import cx_Oracle
import datetime
dt = datetime.datetime.now()
tt_1 = dt.strftime('%Y-%m-%d %H:%M:%S') #当前时间
def insert_record():
global db
db=cx_Oracle.connect('happy/mima@127.0.0.1:1521/ORCL')
cursor = db.cursor()
Sql_1 = "INSERT into STU_01 (ID,NAME,AGE,GRADE,ADDRESS,MATH,CHINESE,SHIJIAN)" \
" values (1,'小明',15,'三年二班','广东省,广州市',60.5,70.5,to_timestamp('2020-10-5 19:3:15','yyyy-mm-ddhh24:mi:ss'))"
cursor.execute(Sql_1)
Key_1 = 2
Key_2 = '李大杰'
Key_3 = 16
Key_4 = '三年二班'
Key_5 = '广东省,佛山市'
Key_6 = 66
Key_7 = 78
Key_8 = "to_timestamp('2020-10-06 10:23:15','yyyy-mm-ddhh24:mi:ss')"
Sql_2 = f"INSERT into STU_01 (ID,NAME,AGE,GRADE,ADDRESS,MATH,CHINESE,SHIJIAN) VALUES({Key_1},'{Key_2}',{Key_3},'{Key_4}','{Key_5}',{Key_6},{Key_7},{Key_8})"
cursor.execute(Sql_2)
Key_1 = 3
Key_2 = 'Zhuohua'
Key_3 = 18
Key_4 = '三年十二班'
Key_5 = '四川省,成都市'
Key_6 = 100
Key_7 = 99
Key_8 = f"to_timestamp('{tt_1}','yyyy-mm-ddhh24:mi:ss')"
Sql_3 = f"INSERT into STU_01 (ID,NAME,AGE,GRADE,ADDRESS,MATH,CHINESE,SHIJIAN) VALUES({Key_1},'{Key_2}',{Key_3},'{Key_4}','{Key_5}',{Key_6},{Key_7},{Key_8})"
cursor.execute(Sql_3)
db.commit() #把执行任务提交到数据库;必须是所有SQL语句都执行成功才会提交
db.close()
def func_main():
try:
insert_record()
except Exception as e:
print(f"插入记录失败,原因: {e}")
db.rollback() #如果发生错误就回滚
else:
print("插入记录成功。")
if __name__ == "__main__":
func_main()
[root@oracle ~]#
脚本运行的结果:
[root@oracle ~]# python3 xx.py
插入记录成功。
[root@oracle ~]#
插入记录成功:
######
例子三:
Oracle服务器本地输出数据库中某个表的所有记录的脚本:
[root@oracle ~]# cat xx.py
#coding=utf-8
import cx_Oracle
def query_data():
db=cx_Oracle.connect('happy/mima@127.0.0.1:1521/ORCL')
cursor = db.cursor()
Sql_1 = "select * from STU_01" #输出表STU_01中的所有记录
cursor.execute(Sql_1)
Result_1 = cursor.fetchall() #使用fetchall可以获取多个元素
print(Result_1)
print(type(Result_1))
print("-" * 10)
for Key_1 in Result_1: #自定义输出格式
ID = Key_1[0]
NAME = Key_1[1]
AGE = Key_1[2]
GRADE = Key_1[3].strip() #去除左边和右边的空格、换行符
ADDRESS = Key_1[4]
MATH = Key_1[5]
CHINESE = Key_1[6]
SHIJIAN = str(Key_1[7])
print(f"id={ID} && 姓名={NAME} && 年龄={AGE} && 班级={GRADE} && 地址={ADDRESS} && 数学成绩={MATH} && 语文成绩={CHINESE} && 时间={SHIJIAN}")
db.commit() #把执行任务提交到数据库
db.close()
def func_main():
try:
query_data()
except Exception as e:
print(f"输出失败,原因: {e}")
if __name__ == "__main__":
func_main()
[root@oracle ~]#
脚本运行的结果:
[root@oracle ~]# python3 xx.py
[(1, '小明', 15, '三年二班 ', <cx_Oracle.LOB object at 0x7f45015dc8f0>, 60.5, 70.5, datetime.datetime(2020, 10, 5, 19, 3, 15)), (2, '李大杰', 16, '三年二班 ', <cx_Oracle.LOB object at 0x7f45015dc8a0>, 66.0, 78.0, datetime.datetime(2020, 10, 6, 10, 23, 15)), (3, 'Zhuohua', 18, '三年十二班 ', <cx_Oracle.LOB object at 0x7f44f9f643a0>, 100.0, 99.0, datetime.datetime(2020, 10, 29, 8, 33))]
<class 'list'>
----------
id=1 && 姓名=小明 && 年龄=15 && 班级=三年二班 && 地址=广东省,广州市 && 数学成绩=60.5 && 语文成绩=70.5 && 时间=2020-10-05 19:03:15
id=2 && 姓名=李大杰 && 年龄=16 && 班级=三年二班 && 地址=广东省,佛山市 && 数学成绩=66.0 && 语文成绩=78.0 && 时间=2020-10-06 10:23:15
id=3 && 姓名=Zhuohua && 年龄=18 && 班级=三年十二班 && 地址=四川省,成都市 && 数学成绩=100.0 && 语文成绩=99.0 && 时间=2020-10-29 08:33:00
[root@oracle ~]#
######
例子四:
Oracle服务器本地输出数据库中某个表里符合指定条件的记录的脚本:
[root@oracle ~]# cat xx.py
#coding=utf-8
import cx_Oracle
def query_data():
db=cx_Oracle.connect('happy/mima@127.0.0.1:1521/orcl')
cursor = db.cursor()
Sql_1 = "select * from STU_01 where GRADE = '三年二班'" #SQL语句
cursor.execute(Sql_1)
Result_1 = cursor.fetchall()
for Key_1 in Result_1: #自定义输出格式
ID = Key_1[0]
NAME = Key_1[1]
AGE = Key_1[2]
GRADE = Key_1[3].rstrip() #单单去除右边的空格、换行符
ADDRESS = Key_1[4]
MATH = Key_1[5]
CHINESE = Key_1[6]
SHIJIAN = str(Key_1[7])
print(f"id={ID} && 姓名={NAME} && 年龄={AGE} && 班级={GRADE} && 地址={ADDRESS} && 数学成绩={MATH} && 语文成绩={CHINESE} && 时间={SHIJIAN}")
db.commit() #把执行任务提交到数据库
db.close()
def func_main():
try:
query_data()
except Exception as e:
print(f"输出失败,原因: {e}")
if __name__ == "__main__":
func_main()
[root@oracle ~]#
脚本运行的结果:
[root@oracle ~]# python3 xx.py
id=1 && 姓名=小明 && 年龄=15 && 班级=三年二班 && 地址=广东省,广州市 && 数学成绩=60.5 && 语文成绩=70.5 && 时间=2020-10-05 19:03:15
id=2 && 姓名=李大杰 && 年龄=16 && 班级=三年二班 && 地址=广东省,佛山市 && 数学成绩=66.0 && 语文成绩=78.0 && 时间=2020-10-06 10:23:15
[root@oracle ~]#
######
例子五:
Oracle服务器本地输出根据关键字搜索出来的记录的脚本:(结果只取一个值)
[root@oracle ~]# cat xx.py
#coding=utf-8
import cx_Oracle
def query_data():
db=cx_Oracle.connect('happy/mima@127.0.0.1:1521/orcl')
cursor = db.cursor()
Sql_1 = "select * from STU_01 where NAME = 'Zhuohua'" #关键字区分英文字母大小写
cursor.execute(Sql_1)
Result_1 = cursor.fetchall()
for Key_1 in Result_1: #自定义输出格式
ID = Key_1[0]
NAME = Key_1[1]
AGE = Key_1[2]
GRADE = Key_1[3].rstrip() #单单去除右边的空格、换行符
ADDRESS = Key_1[4]
MATH = Key_1[5]
CHINESE = Key_1[6]
SHIJIAN = str(Key_1[7])
print(f"id={ID} && 姓名={NAME} && 年龄={AGE} && 班级={GRADE} && 地址={ADDRESS} && 数学成绩={MATH} && 语文成绩={CHINESE} && 时间={SHIJIAN}")
print("-" * 10)
print(f"{NAME}的年龄:")
print(AGE)
print(type(AGE))
db.commit() #把执行任务提交到数据库
db.close()
def func_main():
try:
query_data()
except Exception as e:
print(f"输出失败,原因: {e}")
if __name__ == "__main__":
func_main()
[root@oracle ~]#
脚本运行的结果:
[root@oracle ~]# python3 xx.py
id=3 && 姓名=Zhuohua && 年龄=18 && 班级=三年十二班 && 地址=四川省,成都市 && 数学成绩=100.0 && 语文成绩=99.0 && 时间=2020-10-29 08:33:00
----------
Zhuohua的年龄:
18
<class 'int'>
[root@oracle ~]#
######
例子六:
Oracle服务器本地输出根据关键字搜索出来的记录的脚本:(结果只取一个值)
[root@oracle ~]# cat xx.py
#coding=utf-8
import cx_Oracle
def query_data():
db=cx_Oracle.connect('happy/mima@127.0.0.1:1521/ORCL')
cursor = db.cursor()
Sql_1 = "select * from STU_01 where NAME = 'Zhuohua'"
cursor.execute(Sql_1)
Result_1 = cursor.fetchall()
for Key_1 in Result_1: #自定义输出格式
ID = Key_1[0]
NAME = Key_1[1]
AGE = Key_1[2]
GRADE = Key_1[3].rstrip() #单单去除右边的空格、换行符
ADDRESS = Key_1[4]
MATH = Key_1[5]
CHINESE = Key_1[6]
SHIJIAN = str(Key_1[7])
print(f"id={ID} && 姓名={NAME} && 年龄={AGE} && 班级={GRADE} && 地址={ADDRESS} && 数学成绩={MATH} && 语文成绩={CHINESE} && 时间={SHIJIAN}")
print("-" * 10)
print(f"{Result_1[0][1]}的语文成绩:")
print(Result_1[0][6])
print(type(Result_1[0][6]))
db.commit() #把执行任务提交到数据库
db.close()
def func_main():
try:
query_data()
except Exception as e:
print(f"输出失败,原因: {e}")
if __name__ == "__main__":
func_main()
[root@oracle ~]#
脚本运行的结果:
[root@oracle ~]# python3 xx.py
id=3 && 姓名=Zhuohua && 年龄=18 && 班级=三年十二班 && 地址=四川省,成都市 && 数学成绩=100.0 && 语文成绩=99.0 && 时间=2020-10-29 08:33:00
----------
Zhuohua的语文成绩:
99.0
<class 'float'>
[root@oracle ~]#
######
例子七:
Oracle服务器本地输出根据关键字搜索出来的记录的脚本:(结果只取一个值)
[root@oracle ~]# cat xx.py
#coding=utf-8
import cx_Oracle
def query_data():
db=cx_Oracle.connect('happy/mima@127.0.0.1:1521/ORCL')
cursor = db.cursor()
Sql_1 = "select * from STU_01 where NAME = 'Zhuohua'"
cursor.execute(Sql_1)
Result_1 = cursor.fetchall()
Result_2 = Result_1[0] #列表的第一个元素,即第一条记录
NAME = Result_2[1]
CHINESE = Result_2[6]
SHIJIAN = str(Result_2[7])
date = str(Result_2[7])[0:10] #输出前面10个字符
time = str(Result_2[7])[-8:] #输出最后8个字符
print(f"姓名={NAME} && 语文成绩={CHINESE} && 具体时间={SHIJIAN} && 日期部分={date} && 时间部分={time}")
print("-" * 10)
print(f"{Result_1[0][1]}的具体时间:")
print(SHIJIAN)
print(type(SHIJIAN))
db.commit() #把执行任务提交到数据库
db.close()
def func_main():
try:
query_data()
except Exception as e:
print(f"输出失败,原因: {e}")
if __name__ == "__main__":
func_main()
[root@oracle ~]#
脚本运行的结果:
[root@oracle ~]# python3 xx.py
姓名=Zhuohua && 语文成绩=99.0 && 具体时间=2020-10-29 08:33:00 && 日期部分=2020-10-29 && 时间部分=08:33:00
----------
Zhuohua的具体时间:
2020-10-29 08:33:00
<class 'str'>
[root@oracle ~]#
######
例子八:
Oracle服务器本地更改记录的脚本:
[root@oracle ~]# cat xx.py
#coding=utf-8
import cx_Oracle
def update_record():
global db
db=cx_Oracle.connect('happy/mima@127.0.0.1:1521/ORCL')
cursor = db.cursor()
Sql_1 = "UPDATE STU_01 SET MATH = 88 WHERE name = 'Zhuohua'" #关键字区分英文字母大小写
cursor.execute(Sql_1)
Sql_2 = "UPDATE STU_01 SET ADDRESS = '广东省,江门市' WHERE Name like '__杰%'"
cursor.execute(Sql_2)
db.commit() #把执行任务提交到数据库;必须是所有SQL语句都执行成功才会提交
db.close()
def func_main():
try:
update_record()
except Exception as e:
print(f"更改记录失败,原因: {e}")
db.rollback() #如果发生错误就回滚
else:
print("更改记录成功。")
if __name__ == "__main__":
func_main()
[root@oracle ~]#
脚本运行的结果:
[root@oracle ~]# python3 xx.py
更改记录成功。
[root@oracle ~]#
######
例子九:
Oracle服务器本地更改记录的脚本:
[root@oracle ~]# cat xx.py
#coding=utf-8
import cx_Oracle
import datetime
dt = datetime.datetime.now()
tt_1 = dt.strftime('%Y-%m-%d %H:%M:%S') #当前时间
def update_record():
global db
db=cx_Oracle.connect('happy/mima@127.0.0.1:1521/ORCL')
cursor = db.cursor()
Sql_1 = "UPDATE STU_01 SET SHIJIAN = to_timestamp('2020-10-07 21:24:5','yyyy-mm-ddhh24:mi:ss') WHERE NAME = '李大杰'"
cursor.execute(Sql_1)
Key_1 = f"to_timestamp('{tt_1}','yyyy-mm-ddhh24:mi:ss')"
Sql_2 = f"UPDATE STU_01 SET SHIJIAN = {Key_1} WHERE ID = 3"
cursor.execute(Sql_2)
db.commit() #把执行任务提交到数据库;必须是所有SQL语句都执行成功才会提交
db.close()
def func_main():
try:
update_record()
except Exception as e:
print(f"更改记录失败,原因: {e}")
db.rollback() #如果发生错误就回滚
else:
print("更改记录成功。")
if __name__ == "__main__":
func_main()
[root@oracle ~]#
脚本运行的结果:
[root@oracle ~]# python3 xx.py
更改记录成功。
[root@oracle ~]#
######
例子十:
Oracle服务器本地删除记录的脚本:
[root@oracle ~]# cat xx.py
#coding=utf-8
import cx_Oracle
def delete_record():
global db
db=cx_Oracle.connect('happy/mima@127.0.0.1:1521/ORCL')
cursor = db.cursor()
Sql_1 = "delete from STU_01 WHERE NAME = '小明'"
cursor.execute(Sql_1)
db.commit() #把执行任务提交到数据库;必须是所有SQL语句都执行成功才会提交
db.close()
def func_main():
try:
delete_record()
except Exception as e:
print(f"删除记录失败,原因: {e}")
db.rollback() #如果发生错误就回滚
else:
print("删除记录成功。")
if __name__ == "__main__":
func_main()
[root@oracle ~]#
脚本运行的结果:
[root@oracle ~]# python3 xx.py
删除记录成功。
[root@oracle ~]#
######
例子十一:
Oracle服务器本地输出数据库最大连接数的脚本:
[root@oracle ~]# cat xx.py
#coding=utf-8
import cx_Oracle
def query_data():
db=cx_Oracle.connect('happy/mima@127.0.0.1:1521/ORCL')
cursor = db.cursor()
Sql_1 = "select value from v$parameter where name='processes'" #输出数据库最大连接数
cursor.execute(Sql_1)
Result_1 = cursor.fetchone()
print(Result_1[0])
db.commit() #把执行任务提交到数据库
db.close()
def func_main():
try:
query_data()
except Exception as e:
print(f"输出失败,原因: {e}")
if __name__ == "__main__":
func_main()
[root@oracle ~]#
脚本运行的结果:
[root@oracle ~]# python3 xx.py
150
[root@oracle ~]#
############
############
服务器本地登录Oracle:
[root@oracle ~]# su - oracle
[oracle@oracle ~]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Thu Oct 29 09:55:10 2020
Copyright (c) 1982, 2009, Oracle. All rights reserved.
SQL> conn /as sysdba;
Connected.
SQL>
查看当前数据库的最大连接数:
SQL> select value from v$parameter where name='processes';
VALUE
--------------------------------------------------------------------------------
150
SQL>
修改数据库的最大连接数:
SQL> Alter system set processes=300 scope=spfile;
Alter system set processes=300 scope=spfile
*
ERROR at line 1:
ORA-32001: write to SPFILE requested but no SPFILE is in use
SQL>
解决办法:
SQL> create spfile from pfile;
File created.
SQL>
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL> startup;
ORACLE instance started.
Total System Global Area 910266368 bytes
Fixed Size 2218672 bytes
Variable Size 247465296 bytes
Database Buffers 654311424 bytes
Redo Buffers 6270976 bytes
Database mounted.
Database opened.
SQL>
修改数据库的最大连接数为300:
SQL> Alter system set processes=300 scope=spfile;
System altered.
SQL>
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL> startup;
ORACLE instance started.
Total System Global Area 910266368 bytes
Fixed Size 2218672 bytes
Variable Size 247465296 bytes
Database Buffers 654311424 bytes
Redo Buffers 6270976 bytes
Database mounted.
Database opened.
SQL>
再次查看当前数据库的最大连接数:(服务器重启后,依然生效)
SQL> select value from v$parameter where name='processes';
VALUE
--------------------------------------------------------------------------------
300
SQL>
############
############
Oracle服务器卸载第三方库(cx_Oracle):
[root@oracle ~]# pip3 uninstall cx_Oracle -y
Uninstalling cx-Oracle-8.0.1:
Successfully uninstalled cx-Oracle-8.0.1
[root@oracle ~]#
Oracle服务器卸载RPM包oracle-instantclient18.3-basic:
[root@oracle ~]# rpm -e oracle-instantclient18.3-basic
[root@oracle ~]#
笺注:假如只是在远程客户端通过Python3脚本管理Oracle数据库,那么Oracle服务器连Python3都不需要安装。
############
############
客户端CentOS7.8离线安装第三方库(cx_Oracle):
[root@ser1 ~]# ls *.whl
cx_Oracle-8.0.1-cp36-cp36m-manylinux1_x86_64.whl
[root@ser1 ~]#
[root@ser1 ~]# pip3 install cx_Oracle-8.0.1-cp36-cp36m-manylinux1_x86_64.whl
Processing ./cx_Oracle-8.0.1-cp36-cp36m-manylinux1_x86_64.whl
Installing collected packages: cx-Oracle
Successfully installed cx-Oracle-8.0.1
[root@ser1 ~]#
客户端安装相关RPM包:(CentOS7/Redhat7要安装oracle-instantclient19.9-basic):
[root@ser1 ~]# rpm -Uvh oracle-instantclient19.9-basic-19.9.0.0.0-1.x86_64.rpm
准备中... ################################# [100%]
正在升级/安装...
1:oracle-instantclient19.9-basic-19################################# [100%]
[root@ser1 ~]#
[root@ser1 ~]# sudo sh -c "echo /usr/lib/oracle/19.9/client64/lib > /etc/ld.so.conf.d/oracle-instantclient.conf"
[root@ser1 ~]#
[root@ser1 ~]# cat /etc/ld.so.conf.d/oracle-instantclient.conf
/usr/lib/oracle/19.9/client64/lib
[root@ser1 ~]#
[root@ser1 ~]# sudo ldconfig
[root@ser1 ~]#
######
例子十二:
客户端远程测试与数据库连接的脚本:(/root/yy.py)
[root@ser1 ~]# cat yy.py
#coding=utf-8
import cx_Oracle
def db_connect():
#远程连接数据库;Oracle服务器的IP地址为192.168.168.163
db=cx_Oracle.connect('happy/mima@192.168.168.163:1521/ORCL')
cursor = db.cursor()
Sql_1 = "SELECT version FROM product_component_version WHERE substr(product, 1, 6) = 'Oracle'" #查看数据库版本信息
cursor.execute(Sql_1)
Result_1 = cursor.fetchone()
print(Result_1)
print(type(Result_1))
print("-" * 10)
print(Result_1[0]) #输出元组的第一个元素
print("-" * 10)
print(f"数据库的版本信息:{Result_1[0]}")
db.close() #关闭数据库连接
def func_main():
try:
db_connect()
except Exception as e:
print(f"数据库连接失败,原因: {e}")
if __name__ == "__main__":
func_main()
脚本运行的结果:(连接成功时)
[root@ser1 ~]# python3 yy.py
('11.2.0.1.0',)
<class 'tuple'>
----------
11.2.0.1.0
----------
数据库的版本信息:11.2.0.1.0
[root@ser1 ~]#
######
例子十三:
客户端远程输出数据库最大连接数的脚本:
[root@ser1 ~]# cat yy.py
#coding=utf-8
import cx_Oracle
def query_data():
db = cx_Oracle.connect('happy/mima@192.168.168.163:1521/ORCL')
cursor = db.cursor()
Sql_1 = "select value from v$parameter where name='processes'"
cursor.execute(Sql_1)
Result_1 = cursor.fetchone()
print(Result_1[0])
db.commit() #把执行任务提交到数据库
db.close()
def func_main():
try:
query_data()
except Exception as e:
print(f"输出失败,原因: {e}")
if __name__ == "__main__":
func_main()
脚本运行的结果:
[root@ser1 ~]# python3 yy.py
300
[root@ser1 ~]#
######
例子十四:
客户端远程输出数据库中某个表的所有记录的脚本:
[root@ser1 ~]# cat yy.py
#coding=utf-8
import cx_Oracle
def query_data():
db = cx_Oracle.connect('happy/mima@192.168.168.163:1521/orcl')
cursor = db.cursor()
Sql_1 = "select * from STU_01" #输出表STU_01中的所有记录
cursor.execute(Sql_1)
Result_1 = cursor.fetchall()
for Key_1 in Result_1: #自定义输出格式
ID = Key_1[0]
NAME = Key_1[1]
AGE = Key_1[2]
GRADE = Key_1[3].strip() #去除左边和右边的空格、换行符
ADDRESS = Key_1[4]
MATH = Key_1[5]
CHINESE = Key_1[6]
SHIJIAN = str(Key_1[7])
print(f"id={ID} && 姓名={NAME} && 年龄={AGE} && 班级={GRADE} && 地址={ADDRESS} && 数学成绩={MATH} && 语文成绩={CHINESE} && 时间={SHIJIAN}")
db.commit() #把执行任务提交到数据库
db.close()
def func_main():
try:
query_data()
except Exception as e:
print(f"输出失败,原因: {e}")
if __name__ == "__main__":
func_main()
脚本运行的结果:
[root@ser1 ~]# python3 yy.py
id=2 && 姓名=李大杰 && 年龄=16 && 班级=三年二班 && 地址=广东省,江门市 && 数学成绩=66.0 && 语文成绩=78.0 && 时间=2020-10-07 21:24:05
id=3 && 姓名=Zhuohua && 年龄=18 && 班级=三年十二班 && 地址=四川省,成都市 && 数学成绩=88.0 && 语文成绩=99.0 && 时间=2020-10-29 11:27:15
[root@ser1 ~]#
相关文章:
Oracle的SQL语句
Win7使用Python3脚本远程管理Oracle11gR2
CentOS8使用Python3脚本远程管理Oracle11gR2
CentOS8_在Docker中安装Oracle11gR2
CentOS8_在Docker中安装Oracle19c
Zabbix调用Python3脚本监控Linux下的Oracle(一)
CentOS6安装Python3
CentOS7安装Python3
Python3脚本管理Linux下的MySQL |