执行SQL语句并处理结果
向数据库发出执行SQL的请求时,需要使用cursor发出查询,服务端执行完成后将返回执行结果。
执行查询
直接执行
调用conn.cursor()函数获取句柄,调用cursor.execute函数执行查询
with conn.cursor() as curs:
curs.execute(“create table test(id int,data text)”)
# the cursor is now closed
预编译方式执行
调用cursor.execute(),使用占位符表示SQL中的变量,再变量值传入。
cur.execute("SELECT * FROM test WHERE id = %s", (3,))
cur.fetchone()
使用游标获取结果
可以通过以下几种方式获取结果:
方法一: 遍历游标
该方法将顺序遍历获取结果集中所有结果。
cur.execute("SELECT * FROM test WHERE id = %s", (3,))
for record in cur:
//do_something...
方法二: cur.fetchone()
该方法将获取结果集中下1行结果,如果结果集中没有后续数据,则返回空。
cur.execute("SELECT * FROM test WHERE id = %s", (3,))
record = cur.fetchone()
//do_something...
方法三: cur.fetchmany([size=fetchsize])
该方法将获取结果集中后续fetchsize行结果,如果不足则返回剩下的所有行,如果结果集中没有后续数据,则返回空。当结果集数量庞大时,建议指定fetchsize分批获取。
cur.execute("SELECT * FROM test WHERE id = %s", (3,))
records = cur.fetchmany(10)
for record in records:
//do_something...
方法四: cur.fetchall()
该方法将一次获取结果集中所有结果。
cur.execute("SELECT * FROM test WHERE id = %s", (3,))
records = cur.fetchall()
for record in records:
//do_something...
执行更新
要更改数据(执行一个insert,update或者delete),可以使用cur.execute函数执行完整的SQL,也可以使用预编译的方式绑定参数后再执行。下面的示例将以预编译的方式执行。
删除
cur.execute("delete FROM test WHERE id = %s", (3,))
更新
cur.execute("update test set data = %s where id = %s", ('bar',42))
插入
cur.execute("INSERT INTO test (id, data) VALUES (%s, %s)", (42, 'bar'))
创建或修改数据库对象
要创建、更改或者删除一个类似表或者视图这样的数据库对象, 可以调用cursor.execute() 方法.
例如创建表:
cur.execute("create table tb_test(c1 int,c2 int)")
cur.execute("create view v_tb_test as select * from tb_test")