WHERE country_id=:1 AND city=:2', ('US', 'Seattle'))
>>> r2 = cursor.execute('SELECT * FROM locations
WHERE country_id=:9 AND city=:4', ('US', 'Seattle'))
>>> r3 = cursor.execute('SELECT * FROM locations
WHERE country_id=:m AND city=:0', ('US', 'Seattle'))
在绑定时,您可以首先准备该语句,然后利用改变的参数执行 None。根据绑定变量时准备
一个语句即足够这一原则,Oracle 将如同在上例中一样对其进行处理。准备好的语句可执
行任意次。
>>> cursor.prepare('SELECT * FROM jobs WHERE min_salary>:min')
>>> r = cursor.execute(None, {'min':1000})
>>> print len(cursor.fetchall())
19
您已经限制了分析的次数。在下一段中,我们将清除不必要的执行,尤其是昂贵的批量插入。
一次多行
大型的插入操作不需求多次的单独插入,这是因为 Python 通过
cx_Oracle.Cursor.executemany 方法完全支持一次插入多行。限制执行操作的数量极大地
改善了程序性能,因此在编写存在大量插入操作的应用程序时应首先考虑这一功能。
我们首先为 Python 模块列表创建一个表,这次直接从 Python 开始。您将在以后删除该表。
>>> create_table = """
CREATE TABLE python_modules (
module_name VARCHAR2(50) NOT NULL,
file_path VARCHAR2(300) NOT NULL
)
"""
>>> from sys import modules
>>> cursor.execute(create_table)
>>> M = []
>>> for m_name, m_info in modules.items():
... try:
... M.append((m_name, m_info.__file__))
... except AttributeError:
... pass
...
>>> len(M)