能否仅用cursor.execute执行SELECT/INSERT/UPDATE?如何提取查询结果?
PyODBC中cursor.execute对SELECT/INSERT/UPDATE的支持及数据提取方法
原问题代码
import pyodbc cnxn_str = ("Driver={ODBC Driver 17 for SQL Server};", "Server=#.#.#.#;", "Database=DataBase;", "PORT=1433;", "UID=xxx;", "PWD=xxx;") cnxn = pyodbc.connect(cnxn_str) //connect to sql database using connection string cursor = cnxn.cursor() sn_query ="SELECT **" cursor.execute(sn_query) //execute the select query for row in cursor: num= row[0] print(num) cursor = cnxn.cursor() //execute the insert query insert_bool_query ="INSERT into Table(name) values(\"The name you wan to insert\"); cursor.execute(insert_bool_query) for row in cursor: print(row)
问题解答
是的,PyODBC里cursor.execute()完全可以执行SELECT、INSERT和UPDATE这三类SQL查询,不同查询的处理方式如下:
1. SELECT查询(查询数据)
执行后游标会指向查询结果集,提取数据的方式有几种:
- 直接遍历游标:像代码里那样
for row in cursor:,每一行是一个可通过索引或字段名访问的对象,比如row[0]取第一列值,row['column_name']取指定列值 - fetchone():单次获取一行数据,返回
None表示无更多数据 - fetchall():一次性获取所有结果行,返回包含所有行的列表
- fetchmany(n):单次获取指定数量(n)的行数据
2. INSERT查询(插入数据)
INSERT执行后不会返回结果集(除非SQL语句用了OUTPUT子句),所以遍历游标拿不到数据。需要注意:
- 必须调用
cnxn.commit()提交事务(PyODBC默认手动提交),否则插入操作不会生效 - 用
cursor.rowcount可以获取成功插入的记录行数
3. UPDATE查询(更新数据)
和INSERT逻辑一致:
- 执行后无结果集,需调用
cnxn.commit()提交事务 - 通过
cursor.rowcount获取被更新的记录行数
修正后的示例代码
import pyodbc # 拼接连接字符串(元组需转为字符串) cnxn_str = ''.join(( "Driver={ODBC Driver 17 for SQL Server};", "Server=#.#.#.#;", "Database=DataBase;", "PORT=1433;", "UID=xxx;", "PWD=xxx;" )) cnxn = pyodbc.connect(cnxn_str) cursor = cnxn.cursor() # SELECT查询示例 sn_query = "SELECT * FROM YourTableName;" # 替换为实际表名 cursor.execute(sn_query) # 遍历结果 for row in cursor: num = row[0] print(num) # INSERT查询示例 insert_query = 'INSERT INTO Table(name) VALUES("The name you want to insert");' cursor.execute(insert_query) cnxn.commit() # 提交事务 print(f"成功插入 {cursor.rowcount} 条记录") # UPDATE查询示例 update_query = 'UPDATE Table SET name = "Updated Name" WHERE id = 1;' # 替换为实际条件 cursor.execute(update_query) cnxn.commit() print(f"成功更新 {cursor.rowcount} 条记录") # 关闭连接 cnxn.close()
内容的提问来源于stack exchange,提问作者MyatKaung
相关产品推荐
相关产品推荐

