4.2 使用游标操作数据库 使用游标操作数据库资源,包括:执行 SQL 语句、调用存储过程、执行事 务、获取结果集操作。
4.2.1执行 SQL 语句 连接创建后,可以使用连接的 cursor 方法生成游标,然后可以使用游标执 行SQL语句和获取结果集。
4.2.1.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()
4.2.1.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()
4.2.2获取结果集 当使用游标执行返回结果集的SQL语句后,可以使用游标的 fetchone 方 法获取结果集中的一行数据、fetchmany 方法获取结果集中的多行数据、 fetchall 方法获取结果集中的所有数据。
4.2.2.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 IF NOT EXISTS test(id INT, name VARCHAR(50))") cur.execute("INSERT INTO test VALUES(1,'hello'), (2,'world')") cur.execute("SELECT * FROM test") row = cur.fetchone() while row is not None: print row row = cur.fetchone() cur.execute("DROP TABLE IF EXISTS test") except GBaseError.DatabaseError, err: print err finally: conn.close()
4.2.2.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()