如何从python终止对数据库的复杂查询?

如何从python终止对数据库的复杂查询?,python,sql-server,pandas,sqlalchemy,Python,Sql Server,Pandas,Sqlalchemy,我想通过python库SqlAlchemy将MS-SQL与pandas数据帧集成 这是一个很好的方法: import sqlalchemy as sa import pandas as pd conn_string= 'DRIVER={ODBC Driver 17 for SQL Server}; SERVER='+server_name+'; DATABASE='+db+'; Trusted_Connection=yes' params = urllib.parse.quote_plus(

我想通过python库
SqlAlchemy
MS-SQL
pandas数据帧
集成

这是一个很好的方法:

import sqlalchemy as sa
import pandas as pd

conn_string= 'DRIVER={ODBC Driver 17 for SQL Server}; SERVER='+server_name+'; DATABASE='+db+'; Trusted_Connection=yes'

params = urllib.parse.quote_plus(
        conn_string)
engine = sa.create_engine("mssql+pyodbc:///?odbc_connect=%s" % params, deprecate_large_types=False)


df = pd.read_sql(query, engine , parse_dates=date_columns)
我得到了pd.DataFrame df。很好

但当我的任务是运行困难的查询时,我希望确保我所做的事情在我的控制之下

我想用连接和子查询编写复杂的脚本。而且似乎没有办法取消它们

杀戮session ID听起来不够好。我会称之为肮脏的方式。我不知道python中的会话id

我正在考虑使用
threading
lib

def foo():
    smth, that kills my query




t = Threading.Timer(30, foo)
t.start()
df = pd.read_sql(query, engine , parse_dates=date_columns)
t.cancel()
一般来说,问题是-我应该在foo中输入什么,以便在30秒后我可以确定我是否尝试过杀死,甚至更多-“确定我已经杀死了”我的会话。(如果我的查询在30秒后仍在运行,则为ofc)

如果能从
sql server Management studio
中获得这样的
红色按钮
,并且能够知道它是否正常工作,那就太好了

此外,我也很乐意看到实现此类功能的任何建议,如:

"
--------------------
Block of T-SQL
--------------------

select (.......) 


into pandas.dataframe or into os.open('table.csv', 'wb') or excel-files 


from (....)"
来自python

将T-SQL的
从(…)
中选择(…)作为pythong字符串

能够在线程中终止与DB的交互(或者类似于smth但与python的交互)

在我的数据库中提交的T-Sql的
块和
Sql选择的结果取决于在我的本地计算机上的
DataFrame
变量或
csv(excel)
中在T-Sql块中执行的操作


如果您知道如何在PG、MySQL或其他DBs中实现这一点,请随意分享您的最佳实践,因为我也没有找到解决方案。我说的是从
复杂的表组合中进行选择
(当数据库还没有准备好在开始后立即给出部分结果时。

您可以添加一些开始时间,并与当前日期时间进行比较,然后得到分钟数。。如果超过,则只需添加抛出异常。。我认为对于SQL Server,使用
kill
也是一种干净的方法。对于kill,用户必须有权更改纽约连接。出于这样的目的授予此权限不是一个好主意。