Cursor

arraysize

语法

Cursor.arraysize

说明:

此读写属性可用于在从 SELECT 语句和 REF CURSORS 读取行时,调整通过内部调用数据库来读取和缓冲的行数。该值可能会极大地影响查询的性能,因为它直接影响 Python 和数据库之间的网络往返次数。对于像 fetchone() 和 fetchall() 这样的方法,它不会改变返回给应用程序的行数。对于 fetchmany(), 它是要读取的默认行数。 由于性能优势,默认值为 100,此值表示每次对数据库的内部调用将读取 100 行

举例:

../../../../../_images/arraysize.png

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

说明:

一次绑定数据的行数,默认1。(读写)

只有当使用setinputsizes()或者var()时使用。

举例:

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)

bindnames

语法

Cursor.bindnames()

说明:

获取绑定变量的名字,该语句已经prepare过。

举例:

../../../../../_images/bindnames.png

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'>}

callfunc

语法

Cursor.callfunc(name, returnType, parameters=[], keywordParameters={})

说明:

执行已经创建好的函数

参数描述

name 函数名称
returnType 返回值类型
parameters 函数参数列表
keywordParameters 其它参数列表

举例:

../../../../../_images/callfunc.png

callproc

语法

Cursor.callproc(name, parameters=[], keyewordParameters={})

说明:

执行已经创建好的过程

参数描述

name 过程名称
parameters 过程参数列表
keywordParameters 其它参数列表

举例:

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]

close

语法

Cursor.close()

说明:

关闭当前游标

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

说明:

获取列描述信息(只读)

获取的信息如下:

(name, type, display_size, internal_size, precision, scale, null_ok)

举例:

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语句

举例:

../../../../../_images/NUMBER.png

按名称绑定

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()

executemany

语法

Cursor.executemany(statement, parameters)

说明:

执行带参数的sql语句

举例:

../../../../../_images/executemany.png

fetchall

语法

Cursor.fetchall()

说明:

获取所有查询语句,返回结果元组

举例:

../../../../../_images/fetchall.png

fetchmany

语法

Cursor.fetchmany([numRows=cursor.arraysize])

说明:

一次获取多行数据,cursor.arraysize属性表明当前一次获取的行数

举例:

../../../../../_images/arraysize.png

fetchone

语法

Cursor.fetchone()

说明:

获取结果集中下一条数据

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,则使用连接上具有相同名称的属性的值。 例子见“使用输出类型处理程序更改提取的数据类型”

__iter__

语法

Cursor.__iter__()

说明:

返回要用作迭代器的游标本身。

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)

将输出表中的数据的行数

scroll

语法

Cursor.scroll(value=0, mode=”relative”)

说明:

滚动当前游标,指向新的位置

mode有如下几种:

relative absolute first last

举例:

../../../../../_images/scroll.png

scrollable

语法

Cursor.scrollable

说明:

设置游标是否可滚动

setinputsizes

语法

Cursor.setinputsizes(*args, **keywordArgs)

说明:

设置预绑定变量的空间

举例:

../../../../../_images/setinputsize.png

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))