
# 执行SQL语句
![](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
在Psycopg2中，当数据库创建游标对象时默认开启事务，该游标下执行的SQL命令都在该事务中。该事务提交和回滚由connection对象处理。
应用程序通过执行SQL语句来操作数据库，可以执行各种类型的SQL语句，例如创建表、插入数据、更新数据、删除数据、查询等。[execute()](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/gaussdb-12-0242.html)方法用于执行单行SQL语句，[executemany()](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/gaussdb-12-0243.html)方法用于执行多行SQL语句。
以下给出execute()和executemany()方法使用的一个示例（完整示例请参考[数据库建连、执行SQL并返回结果](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/gaussdb-12-0236.html)）。前置条件是已经连接数据库，连接对象为conn。
1. 调用[cursor()](https://support.huaweicloud.com/distributed-devg-v10-gaussdb/gaussdb-12-0241.html)方法创建游标对象。
   
   ```
   cur=conn.cursor()
   ```
   
   
2. 调用execute()方法创建student表。 
   ```
   cur.execute("CREATE TABLE student(id integer,name varchar,gender varchar)")
   ```
   
   
3. 调用execute()方法逐个插入数据。 
   ```
   cur.execute("INSERT INTO student(id,name,gender) VALUES(%s,%s,%s)",(1,'Aspirin','M'))   # 使用%s作为占位符，执行时参数值会自动替换%s占位符。
   cur.execute("INSERT INTO student(id,name,gender) VALUES(%s,%s,%s)",(2,'Taxol','F'))
   cur.execute("INSERT INTO student(id,name,gender) VALUES(%s,%s,%s)",(3,'Dixheral','M'))
   ```
   
   
4. 调用executemany()方法批量插入数据。 
   ```
   stus = ((4,'John','M'),(5,'Alice','F'),(6,'Peter','M'))
   cur.executemany("INSERT INTO student(id,name,gender) VALUES(%s,%s,%s)",stus)
   ```
   
   
5. 调用execute()方法将id为1的学生姓名更新为'Aspirin Updated'。 
   ```
   cur.execute("UPDATE student SET name=%s WHERE id=%s", ('Aspirin Updated', 1))
   ```
   
   
6. 调用execute()方法删除id为2的学生记录。 
   ```
   cur.execute("DELETE FROM student WHERE id=%s", (2,))
   ```
   
   
7. 调用execute()方法查询结果集。
   
   ```
   cur.execute("SELECT * FROM student")
   ```
   
   
 
