嵌套
下面,您需要创建一个包含 init_default.ora 中的默认参数的相似字典。您完全可以将其读取到全新的变量,但这里我们将介绍对象如何可靠地嵌套在 Python 中。您将创建一个简单的父目录 initParams,并针对每个 init.ora 文件在其中嵌套一个目录。您还将导入刚刚编写的文件,以便可以调用它的 read() 函数。创建一个名为 compareInitOra.py 的新文本文件。
import readInitOra
initParams = {}
# brackets denote a list that we can loop through
for fileName in ['init_orcl.ora', 'init_default.ora']:
initParams[fileName] = readInitOra.read(fileName)
print initParams
c:\> python compareInitOra.py
{'init_orcl.ora':
{'UNDO_MANAGEMENT':'AUTO', 'COMPATIBLE': '9.2.0.0.0',
'DB_BLOCK_SIZE':'8192', 'FAST_START_MTTR_TARGET': '300',
'SGA_MAX_SIZE':'157286400, 'SHARED_POOL_SIZE': '50331648'}
'init_default.ora':
{'COMPATIBLE':'9.2.0.0.0', 'DB_BLOCK_SIZE': '4096',
'FAST_START_MTTR_TARGET':'300', 'SGA_MAX_SIZE': '100663296',
'SHARED_POOL_SIZE': '50331648'}}
这次的输出包含一些空格,以帮助您查看嵌套结构。您可以轻松地编写 Python 代码以可靠地打印它,也可以使用 Python 的 pprint 模块,但由于我们是数据库用户,因此将该数据置入 Oracle 数据库中。
在 Python 中使用 SQL
要访问数据库,Python 解释器需要安装数据库模块。您有许多选择,这些选择均遵守标准化的 API 规范,并且曾经以编程方式使用过 ODBC 或 JDBC 的任何人均非常熟悉它们。您将使用 cx_Oracle,因为它比较易于安装。只需下载一个与您的 Python 和 Oracle 数据库版本匹配的 Windows 安装程序。
安装 cx_Oracle 后,返回 Python 命令行解释器进行试用。由于 cx_Oracle 是一个独立于核心 Python 语言的模块,因此在将其用于任何会话或脚本之前必须导入它。
>>> import cx_Oracle
请记住要使用大写字母!下面,我们将创建一个用于存储结果的表。
>>> orcl = cx_Oracle.connect('scott/tiger@orcl')
>>> curs = orcl.cursor()
>>> sql = """CREATE TABLE INIT_PARAMS
... ( fileName VARCHAR2(30),
... param VARCHAR2(64),
... value VARCHAR2(512) )"""
三个引号 (""") 是一个用于输入包含换行符的方便语法。Python 解释器将其提示符从 >>> 更改为 ... - 提醒您将继续从上一行开始的输入。
>>> curs.execute(sql)
>>> curs.close()
现在您的表已经准备就绪,下面我们将编写 recordInitOra.py 来填充它。
import readInitOra, cx_Oracle
initParams = {}
for fileName in ['init_orcl.ora', 'init_default.ora']:
initParams[fileName] = readInitOra.read(fileName)
orcl = cx_Oracle.connect('scott/tiger@orcl')
curs = orcl.cursor()
for fileName in initParams.keys():
for param in initParams[fileName].keys():
value = initParams[fileName][param]
sql = """INSERT INTO INIT_PARAMS VALUES
(:fileName, :param, :value)"""
bindVars = {'fileName':fileName,
'param':param, 'value':value}
curs.execute(sql, bindVars)
curs.close()
orcl.commit()
|
您将承担一切因您的行为、言论而直接或间接导致的民事或刑事法律责任
留言板管理人员有权保留或删除其管辖留言中的任意内容 本站提醒:不要进行人身攻击。谢谢配合。 |