GBase 8a
运维管理
文章

GBase PYTHON接口-使用游标操作数据库

发表于2025-01-03 16:24:4758次浏览0个评论

当使用python接口创建连接后,可以使用连接的cursor方法生成游标,然后可以使用游标执行SQL语句和获取结果集.

执行sql语句

1.使用游标执行单条SQL语句。

from GBaseConnector import connect, GBaseError

if __name__ == '__main__':

    config = {'host':'172.16.0.131',

             'user':'root',

               'passwd':'111111',

               'port':5258}

    try:

        conn = connect()

       conn.connect(**config)

        cur = conn.cursor()

       cur.execute("CREATE DATABASE test")

    except GBaseError.DatabaseError, err:

        print err

    finally:

       conn.close()

2.使用游标执行多条SQL语句。

from GBaseConnector import connect, GBaseError

if __name__ == '__main__':

    config = {'host':'172.16.0.131',

             'user':'root',

             'passwd':'111111',

             'port':5258,

             'db':'test'}

    try:

        conn = connect()

       conn.connect(**config)

        cur = conn.cursor()

       cur.execute("CREATE TABLE IF NOT EXISTS test(id INT, name VARCHAR(20))")

       cur.execute("INSERT INTO test VALUES(%s,%s)", (1,'hello'))

       

        iters = cur.execute("UPDATE test SET id=%s,name=%s;DELETE FROM test;SELECT 'result';", 

                           params=(2,'world'), multi_stmt=True)

        for i in iters:

           try:

               print i.fetchall()

           except GBaseError.InterfaceError:

                pass

       cur.execute("DROP TABLE IF EXISTS test")

    except GBaseError.DatabaseError, err:

        print err

    finally:

       conn.close()

获取结果集

当使用游标执行返回结果集的SQL语句后,可以使用游标的fetchone方法获取结果集中的一行数据、fetchmany方法获取结果集中的多行数据、fetchall方法获取结果集中的所有数据。

1.获取一行数据

使用游标的fetchone方法获取结果集中的一行数据。fetchone接口可以循环调用,直到结果集中的数据获取完毕。

from GBaseConnector import connect, GBaseError

if __name__ == '__main__':

    config = {'host':'172.16.0.131',

             'user':'root',

             'passwd':'111111',

             'port':5258,

             'db':'test'}

    try:

        conn = connect()

       conn.connect(**config)

        cur = conn.cursor()

       cur.execute("DROP TABLE IF EXISTS test")

       cur.execute("CREATE TABLE test (COL1 INT, COL2 VARCHAR(20))")

        opfmt = "INSERT INTO test(COL1, COL2) VALUES(%s, %s)"

        rows = []

        for i in xrange(0, 100):

           rows.append((i, "row" + str(i)))

       cur.executemany(opfmt, rows)

       cur.execute("SELECT * FROM test limit 5;SELECT * FROM TEST LIMIT 10, 5;SELECT * FROM TEST LIMIT 15, 5", multi_stmt= True)       

       cur.nextset(2)

        print cur.fetchall()

 

       cur.execute("DROP TABLE IF EXISTS test")

    except GBaseError.DatabaseError, err:

        print err

    finally:

       conn.close()

2.获取多行数据

使用游标的fetchmany方法获取结果集中的多行数据。fetchmany接口可以循环调用,直到结果集中的数据获取完毕。

 

from GBaseConnector import connect, GBaseError

if __name__ == '__main__':

    config = {'host':'172.16.0.131',

             'user':'root',

             'passwd':'111111',

             'port':5258,

             'db':'test'}

    try:

        conn = connect()

       conn.connect(**config)

        cur = conn.cursor()

       cur.execute("DROP TABLE IF EXISTS test")

       cur.execute("CREATE TABLE test (COL1 INT, COL2 VARCHAR(20))")

        opfmt = "INSERT INTO test(COL1, COL2) VALUES(%s, %s)"

        rows = []

        for i in xrange(0, 100):

           rows.append((i, "row" + str(i)))

       cur.executemany(opfmt, rows)

       cur.execute("SELECT * FROM test")       

 

        row = cur.fetchmany(3)

        while row:

           print row

           row = cur.fetchmany(4)

 

       cur.execute("DROP TABLE IF EXISTS test")

    except GBaseError.DatabaseError, err:

        print err

    finally:

       conn.close()

3.获取所有数据

使用游标的fetchall方法获取结果集中的所有行数据。

from GBaseConnector import connect, GBaseError

if __name__ == '__main__':

    config = {'host':'172.16.0.131',

             'user':'root',

             'passwd':'111111',

             'port':5258,

             'db':'test'}

    try:

        conn = connect()

       conn.connect(**config)

        cur = conn.cursor()

       cur.execute("DROP TABLE IF EXISTS test")

       cur.execute("CREATE TABLE test (COL1 INT, COL2 VARCHAR(20))")

        opfmt = "INSERT INTO test(COL1, COL2) VALUES(%s, %s)"

        rows = []

        for i in xrange(0, 100):

           rows.append((i, "row" + str(i)))

       cur.executemany(opfmt, rows)

       cur.execute("SELECT * FROM test")       

 

        print cur.fetchall()

 

       cur.execute("DROP TABLE IF EXISTS test")

    except GBaseError.DatabaseError, err:

        print err

    finally:

       conn.close()

评论

登录后才可以发表评论