如何从python终止对数据库的复杂查询?
我想通过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(
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,用户必须有权更改纽约连接。出于这样的目的授予此权限不是一个好主意。