You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否仅用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 07:25:19