Cursor¶
arraysize¶
语法¶
Cursor.arraysize
说明:¶
此读写属性可用于在从 SELECT 语句和 REF CURSORS 读取行时,调整通过内部调用数据库来读取和缓冲的行数。该值可能会极大地影响查询的性能,因为它直接影响 Python 和数据库之间的网络往返次数。对于像 fetchone() 和 fetchall() 这样的方法,它不会改变返回给应用程序的行数。对于 fetchmany(), 它是要读取的默认行数。 由于性能优势,默认值为 100,此值表示每次对数据库的内部调用将读取 100 行
举例:¶
arrayvar¶
语法¶
Cursor.arrayvar(typ, value, size[])
说明:¶
创建与给定类型和大小的游标关联的数组变量,并返回变量对象。该值可以是指定要分配的元素数的整数,也可以是一个列表,分配的元素数是从列表的大小中提取的。如果该值是列表,则变量也随列表的内容一起设置。如果未指定大小,并且类型为字符串或二进制,则分配 4000 字节。这是将数组传递给 PL/SQL(在列表可能为空且无法自动确定类型的情况下)或从 PL/SQL 返回数组所必需的。
举例:¶
array = cursor.arrayvar(STPython.NUMBER, 10)
array.setvalue(0, [1,2,3,4])
print(array)
输出
<STPython.NUMBER with value [1.0, 2.0, 3.0, 4.0]>
bindarraysize¶
语法¶
Cursor.bindarraysize
举例:¶
rows = [ ( 1, "First" ),
( 2, "Second" ),
( 3, "Third" ),
( 4, "Fourth" ),
( 5, "Fifth" ),
( 6, "Sixth" ),
( 7, "Seventh" )]
cursor.bindarraysize = 5
cursor.setinputsizes(int, 100)
sql = "insert into TestTempTable (IntCol, StringCol) values (:1, :2)"
cursor.executemany(sql, rows)
connection.commit()
var = cursor.bindvars
print(var)
cursor.execute("select count(*) from TestTempTable")
count, = cursor.fetchone()
print(count)
bindvars¶
语法¶
Cursor.bindvars
说明:¶
此只读属性提供用于上次执行的绑定变量。该值可以是列表还是字典,具体取决于绑定是按位置还是按名称完成的。引用此属性时应小心。特别是,不应删除或替换元素。
举例:¶
举例:¶
statement = "insert into TestTempTable (IntCol,StringCol) values (:var1, :var2)"
cursor.prepare(statement)
cursor.execute(None, var1=1, var2="hello")
print(cursor.bindvars)
输出
{'var1': <STPython.NUMBER with value 1>, 'var2': <STPython.STRING with value 'hello'>}
callproc¶
语法¶
Cursor.callproc(name, parameters=[], keyewordParameters={})
举例:¶
statement = """create procedure proc_Test (
a_InValue varchar2,
a_InOutValue in out number,
a_OutValue out number
) as
begin
a_InOutValue := a_InOutValue * length(a_InValue);
a_OutValue := length(a_InValue);
end;"""
cursor.execute(statement)
var = cursor.var(STPython.NUMBER)
results = cursor.callproc("proc_Test", ("hi", 5, var))
print(results)
输出
['hi', 10, 2.0]
connection¶
语法¶
Cursor.connection
说明:¶
获取当前游标连接信息(只读)
举例:¶
connection = STPython.connect(user="SYSDBA", password="szoscar55",
dsn="localhost:2003/osrdb", threaded = False,
encoding="UTF-8")
cursor = connection.cursor()
print(cursor.connection)
输出
<STPython.Connection to SYSDBA@localhost:2003/osrdb>
description¶
语法¶
Cursor.description
举例:¶
cursor.execute("select * from test")
print(cursor.description)
输出
[('COL1', <class 'STPython.NUMBER'>, 39, None, 38, 0, 1), ('COL2', <class 'STPython.STRING'>, 400, 1600, None, None, 1)]
execute¶
语法¶
Cursor.execute(statement[, parameters], **keywordParameters)
说明:¶
执行sql语句
举例:¶
按名称绑定
cursor.execute("insert into test (col1,col2) values (:var1,:var2)", var1=333,var2="third")
connection.commit()
按位置绑定
statement = "insert into test (col1,col2) values (:1,:2)"
cursor.prepare(statement)
cursor.execute(None, [222,"second"])
connection.commit()
fetchmany¶
语法¶
Cursor.fetchmany([numRows=cursor.arraysize])
说明:¶
一次获取多行数据,cursor.arraysize属性表明当前一次获取的行数
举例:¶
fetchraw¶
语法¶
Cursor.fetchraw(num_rows=cursor.arraysize)
说明:¶
将查询结果的下一组行提取到游标的已定义变量的内部缓冲区中。返回实际读取的行数。 如果上一次对 execute() 的调用未生成任何结果集或尚未发出任何调用,则会引发异常。
举例:¶
cursor.execute("select * from TestTempTable")
result = cursor.fetchraw()
print(result)
fetchvars¶
语法¶
Cursor.fetchvars
说明:¶
此只读属性指定为在游标上执行的最后一个查询创建的变量列表。引用此属性时应小心。特别是,不应删除或替换元素。
举例:¶
cursor = connection.cursor()
cursor.execute("select a from tab where id=1")
cursor.fetchone()
print(cursor.fetchvars)
inputtypehandler¶
语法¶
Cursor.inputtypehandler
说明:¶
此读写属性指定为每个值调用的方法,该方法绑定到游标上执行的语句,并在指定的情况下覆盖连接上具有相同名称的属性。方法签名是处理程序(游标,值,数组大小),返回值应为变量对象或 None,在这种情况下,将创建默认变量对象。如果此属性为 None,则使用连接上具有相同名称的属性的值。 例子见“使用输出类型处理程序更改提取的数据类型”
lastrowid¶
语法¶
Cursor.lastrowid
说明:¶
此只读属性返回游标修改的最后一行的 rowid。如果对游标执行的最后一个操作未修改任何行,则返回值 None。
举例:¶
createSql = "CREATE TABLE tab(id int AUTO_INCREMENT, A character varying(50),B int, PRIMARY KEY(id));"
cursor.execute(createSql)
sql = "insert into tab(a, b) values (:1, :2)"
cursor.execute(sql,["test",1])
connection.commit()
print(cursor.lastrowid)
outputtypehandler¶
语法¶
Cursor.outputtypehandler
说明:¶
此读写属性指定为要从此游标读取的每一列调用的方法。方法签名是处理程序(光标、名称、默认类型、长度、精度、小数位数),返回值应为变量对象或 None,在这种情况下,将创建默认变量对象。如果此属性为 None,则改用连接上具有相同名称的属性的值。 例子见“使用输出类型处理程序更改提取的数据类型”
parse¶
语法¶
Cursor.parse(statement)
说明:¶
这可用于在不实际执行语句的情况下解析语句(此步骤在执行语句时自动完成)
举例:¶
sql = b"select * from tab where id = :val"
print(cursor.parse(sql))
rowfactory¶
语法¶
Cursor.rowfactory
说明:¶
此读写属性指定要为从数据库检索的每一行调用的方法。通常,每行都返回一个元组,但如果设置了此属性,则使用通常返回的元组调用该方法,并改为返回该方法的结果。
举例:¶
class Test(object):
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
cursor.execute("select * from TestTempTable")
cursor.rowfactory = Test
for row in cursor:
print("a = %s, b = %s, c = %s" % (row.a, row.b, row.c))
输出
a = 1, b = First, c = 1
a = 2, b = second, c = 1
a = 3, b = Third, c = 1
a = 4, b = Fourth, c = 1
. . .
prepare¶
语法¶
Cursor.prepare(statement[, tag])
说明:¶
准备sql语句
举例:¶
statement = "insert into test (col1,col2) values (:1,:2)"
cursor.prepare(statement)
cursor.execute(None, [222,"second"])
connection.commit()
rowcount¶
语法¶
Cursor.rowcount
说明:¶
获取当前已经fetch的行数(只读)
举例:¶
cursor.execute("select * from TestTempTable")
res = cursor.fetchall()
print(cursor.rowcount)
将输出表中的数据的行数
statement¶
语法¶
Cursor.statement
说明:¶
获取当前操作的SQL语句(只读)
举例:¶
cursor.prepare("insert TAB1 values(:a,:b)")
print(cursor.statement)
var¶
语法¶
Cursor.var(dataType[, size, arraysize, inconverter, outconverter, typename])
说明:¶
创建Variable对象,根据指定的参数
举例:¶
var = cursor.var(STPython.STRING,100,10) # 100单个var的长度,10 容量
print(var.size)
var.setvalue(0,"hello0")
var.setvalue(2,"hello2")
var.setvalue(9,"hello9")
print(var.getvalue(0))
print(var.getvalue(2))
print(var.getvalue(9))