鱼C论坛

 找回密码
 立即注册
查看: 2295|回复: 4

[已解决]pandas如何执行下边这个存储过程?

[复制链接]
发表于 2023-6-1 22:12:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. declare @spid int
  2.   declare @sql varchar(1000)
  3.    DECLARE @UserId varchar(100)
  4. DECLARE cursor_name CURSOR FOR --定义游标
  5.     select   request_session_id  
  6.   spid    from  
  7.   sys.dm_tran_locks where resource_type='OBJECT'
  8. OPEN cursor_name --打开游标
  9. FETCH NEXT FROM cursor_name INTO  @UserId --抓取下一行游标数据
  10. WHILE @@FETCH_STATUS = 0
  11.     BEGIN
  12. Set @spid = @UserId --锁表进程
  13. set @sql='kill '+cast(@spid as varchar)
  14. exec(@sql)
  15.         FETCH NEXT FROM cursor_name INTO @UserId
  16.     END
  17. CLOSE cursor_name --关闭游标
  18. DEALLOCATE cursor_name --释放游标
复制代码



pandas可以执行这个存储过程吗?需要传个他啥参数吗?
我只知道这个语句在sql库直接执行就可以释放掉所有事务
最佳答案
2023-6-1 22:14:18
Pandas是一个Python数据处理库,主要提供数据清洗、转换等操作,而不直接支持SQL存储过程的执行。你的代码是T-SQL语句,用于释放锁定的数据库进程,这需要在SQL Server环境中执行。

然而,你可以使用Python连接到数据库,然后执行这段代码。Python的pyodbc或pymssql库可以帮助你连接到SQL Server并执行T-SQL语句。

以下是使用pyodbc库执行存储过程的例子:

  1. import pyodbc

  2. # 连接到SQL Server
  3. conn = pyodbc.connect('DRIVER={SQL Server};SERVER=your_server;DATABASE=your_database;UID=your_username;PWD=your_password')

  4. cursor = conn.cursor()

  5. # 执行存储过程
  6. tsql = """
  7. DECLARE @spid int, @sql varchar(1000), @UserId varchar(100)

  8. DECLARE cursor_name CURSOR FOR --定义游标
  9. SELECT request_session_id FROM sys.dm_tran_locks WHERE resource_type='OBJECT'

  10. OPEN cursor_name --打开游标
  11. FETCH NEXT FROM cursor_name INTO @UserId --抓取下一行游标数据
  12. WHILE @@FETCH_STATUS = 0
  13. BEGIN
  14.     SET @spid = @UserId --锁表进程
  15.     SET @sql='kill '+cast(@spid as varchar)
  16.     EXEC(@sql)
  17.     FETCH NEXT FROM cursor_name INTO @UserId
  18. END
  19. CLOSE cursor_name --关闭游标
  20. DEALLOCATE cursor_name --释放游标
  21. """

  22. cursor.execute(tsql)

  23. conn.close()
复制代码


注意:请替换上面代码中的 your_server , your_database , your_username , your_password 为你自己的服务器、数据库、用户名和密码信息。

还要注意的是,执行这种类型的操作需要有足够的权限。如果你试图去杀掉一个你没有权限的进程,你会收到一个错误。

最后,你应当谨慎使用这段代码,因为它会杀掉所有锁定的进程,这可能会导致数据丢失或其他严重问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-6-1 22:14:18 | 显示全部楼层    本楼为最佳答案   
Pandas是一个Python数据处理库,主要提供数据清洗、转换等操作,而不直接支持SQL存储过程的执行。你的代码是T-SQL语句,用于释放锁定的数据库进程,这需要在SQL Server环境中执行。

然而,你可以使用Python连接到数据库,然后执行这段代码。Python的pyodbc或pymssql库可以帮助你连接到SQL Server并执行T-SQL语句。

以下是使用pyodbc库执行存储过程的例子:

  1. import pyodbc

  2. # 连接到SQL Server
  3. conn = pyodbc.connect('DRIVER={SQL Server};SERVER=your_server;DATABASE=your_database;UID=your_username;PWD=your_password')

  4. cursor = conn.cursor()

  5. # 执行存储过程
  6. tsql = """
  7. DECLARE @spid int, @sql varchar(1000), @UserId varchar(100)

  8. DECLARE cursor_name CURSOR FOR --定义游标
  9. SELECT request_session_id FROM sys.dm_tran_locks WHERE resource_type='OBJECT'

  10. OPEN cursor_name --打开游标
  11. FETCH NEXT FROM cursor_name INTO @UserId --抓取下一行游标数据
  12. WHILE @@FETCH_STATUS = 0
  13. BEGIN
  14.     SET @spid = @UserId --锁表进程
  15.     SET @sql='kill '+cast(@spid as varchar)
  16.     EXEC(@sql)
  17.     FETCH NEXT FROM cursor_name INTO @UserId
  18. END
  19. CLOSE cursor_name --关闭游标
  20. DEALLOCATE cursor_name --释放游标
  21. """

  22. cursor.execute(tsql)

  23. conn.close()
复制代码


注意:请替换上面代码中的 your_server , your_database , your_username , your_password 为你自己的服务器、数据库、用户名和密码信息。

还要注意的是,执行这种类型的操作需要有足够的权限。如果你试图去杀掉一个你没有权限的进程,你会收到一个错误。

最后,你应当谨慎使用这段代码,因为它会杀掉所有锁定的进程,这可能会导致数据丢失或其他严重问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-1 22:15:04 | 显示全部楼层
本帖最后由 歌者文明清理员 于 2023-6-1 22:18 编辑

mysql 安装教程(只查看“安装mysql”部分,别的不用管)https://fishc.com.cn/thread-227344-1-1.html
mysql 下载地址:https://dev.mysql.com/downloads/file/?id=518835
由于pandas是一个Python数据分析库,不是一个SQL执行器,因此无法直接执行这个SQL存储过程。你需要在连接到SQL Server的Python代码中执行该存储过程,可以使用pyodbc或pymssql等库来连接SQL Server,并将该存储过程作为一个字符串传递给执行器来执行。如果需要传递参数,可以使用参数化查询的方式将参数传递给该存储过程。例如,可以使用以下代码来连接SQL Server并执行该存储过程:

  1. import pyodbc

  2. conn = pyodbc.connect('DRIVER={SQL Server};SERVER=<server_name>;DATABASE=<database_name>;Trusted_Connection=yes;')
  3. cursor = conn.cursor()

  4. cursor.execute("""declare @spid int
  5.                   declare @sql varchar(1000)
  6.                   DECLARE @UserId varchar(100)
  7.                   DECLARE cursor_name CURSOR FOR --定义游标
  8.                       select   request_session_id  
  9.                   spid    from  
  10.                   sys.dm_tran_locks where resource_type='OBJECT'
  11.                   OPEN cursor_name --打开游标
  12.                   FETCH NEXT FROM cursor_name INTO  @UserId --抓取下一行游标数据
  13.                   WHILE @@FETCH_STATUS = 0
  14.                       BEGIN
  15.                   Set @spid = @UserId --锁表进程
  16.                   set @sql='kill '+cast(@spid as varchar)
  17.                   exec(@sql)
  18.                           FETCH NEXT FROM cursor_name INTO @UserId
  19.                       END
  20.                   CLOSE cursor_name --关闭游标
  21.                   DEALLOCATE cursor_name --释放游标""")

  22. conn.commit()
  23. conn.close()
复制代码


需要将<server_name>和<database_name>替换为实际的SQL Server实例和数据库名称。如果需要传递参数,可以使用pyodbc的参数化查询方式,例如:

  1. cursor.execute("EXEC my_stored_proc @param1 = ?, @param2 = ?", ('value1', 'value2'))
复制代码


将my_stored_proc替换为实际的存储过程名称,并在元组中指定要传递的参数值。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-6-1 22:26:55 | 显示全部楼层
isdkz 发表于 2023-6-1 22:14
Pandas是一个Python数据处理库,主要提供数据清洗、转换等操作,而不直接支持SQL存储过程的执行。你的代码 ...

你这用的啥东西啊,这么牛逼,3.5表示你这个api太强了,怪兽一样的存在
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-1 22:27:44 | 显示全部楼层
rsj0315 发表于 2023-6-1 22:26
你这用的啥东西啊,这么牛逼,3.5表示你这个api太强了,怪兽一样的存在

我这个是gpt4
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-24 01:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表