rsj0315 发表于 2023-6-1 22:12:00

pandas如何执行下边这个存储过程?

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库直接执行就可以释放掉所有事务

isdkz 发表于 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 为你自己的服务器、数据库、用户名和密码信息。

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

最后,你应当谨慎使用这段代码,因为它会杀掉所有锁定的进程,这可能会导致数据丢失或其他严重问题。

歌者文明清理员 发表于 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替换为实际的存储过程名称,并在元组中指定要传递的参数值。

rsj0315 发表于 2023-6-1 22:26:55

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

你这用的啥东西啊,这么牛逼,3.5表示你这个api太强了,怪兽一样的存在

isdkz 发表于 2023-6-1 22:27:44

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

我这个是gpt4{:5_97:}
页: [1]
查看完整版本: pandas如何执行下边这个存储过程?