鱼C论坛

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

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

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

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

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

x
declare @spid int
  declare @sql varchar(1000)
   DECLARE @UserId varchar(100)
DECLARE cursor_name CURSOR FOR --定义游标
    select   request_session_id  
  spid    from  
  sys.dm_tran_locks where resource_type='OBJECT'
OPEN cursor_name --打开游标
FETCH NEXT FROM cursor_name INTO  @UserId --抓取下一行游标数据
WHILE @@FETCH_STATUS = 0
    BEGIN
Set @spid = @UserId --锁表进程
set @sql='kill '+cast(@spid as varchar)
exec(@sql)
        FETCH NEXT FROM cursor_name INTO @UserId
    END
CLOSE cursor_name --关闭游标
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库执行存储过程的例子:
import pyodbc

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

cursor = conn.cursor()

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

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

OPEN cursor_name --打开游标
FETCH NEXT FROM cursor_name INTO @UserId --抓取下一行游标数据
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @spid = @UserId --锁表进程
    SET @sql='kill '+cast(@spid as varchar)
    EXEC(@sql)
    FETCH NEXT FROM cursor_name INTO @UserId
END
CLOSE cursor_name --关闭游标
DEALLOCATE cursor_name --释放游标
"""

cursor.execute(tsql)

conn.close()

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

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

最后,你应当谨慎使用这段代码,因为它会杀掉所有锁定的进程,这可能会导致数据丢失或其他严重问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

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

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

cursor = conn.cursor()

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

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

OPEN cursor_name --打开游标
FETCH NEXT FROM cursor_name INTO @UserId --抓取下一行游标数据
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @spid = @UserId --锁表进程
    SET @sql='kill '+cast(@spid as varchar)
    EXEC(@sql)
    FETCH NEXT FROM cursor_name INTO @UserId
END
CLOSE cursor_name --关闭游标
DEALLOCATE cursor_name --释放游标
"""

cursor.execute(tsql)

conn.close()

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

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

最后,你应当谨慎使用这段代码,因为它会杀掉所有锁定的进程,这可能会导致数据丢失或其他严重问题。
想知道小甲鱼最近在做啥?请访问 -> 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并执行该存储过程:
import pyodbc

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

cursor.execute("""declare @spid int
                  declare @sql varchar(1000)
                  DECLARE @UserId varchar(100)
                  DECLARE cursor_name CURSOR FOR --定义游标
                      select   request_session_id  
                  spid    from  
                  sys.dm_tran_locks where resource_type='OBJECT'
                  OPEN cursor_name --打开游标
                  FETCH NEXT FROM cursor_name INTO  @UserId --抓取下一行游标数据
                  WHILE @@FETCH_STATUS = 0
                      BEGIN
                  Set @spid = @UserId --锁表进程
                  set @sql='kill '+cast(@spid as varchar)
                  exec(@sql)
                          FETCH NEXT FROM cursor_name INTO @UserId
                      END
                  CLOSE cursor_name --关闭游标
                  DEALLOCATE cursor_name --释放游标""")

conn.commit()
conn.close()

需要将<server_name>和<database_name>替换为实际的SQL Server实例和数据库名称。如果需要传递参数,可以使用pyodbc的参数化查询方式,例如:
cursor.execute("EXEC my_stored_proc @param1 = ?, @param2 = ?", ('value1', 'value2'))

将my_stored_proc替换为实际的存储过程名称,并在元组中指定要传递的参数值。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你这用的啥东西啊,这么牛逼,3.5表示你这个api太强了,怪兽一样的存在
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我这个是gpt4
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 10:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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