Python 并行化ODBC SQL数据库调用

Python 并行化ODBC SQL数据库调用,python,sql,multithreading,pandas,pyodbc,Python,Sql,Multithreading,Pandas,Pyodbc,我目前正在通过pandas.io.sql.read\u sql()命令将数据查询到dataframe中。我想把这些电话与这家伙所提倡的类似:() 类似于(非常一般): 这样做可能吗?是的,这应该是可行的,不过需要注意的是,您需要在您所在站点的演讲中更改parallel_connection.py。在该代码中有一个fetchall函数,它并行执行每个游标,然后合并结果。这是您将要改变的核心: 旧代码: def fetchall(self): results = [None] * len(s

我目前正在通过
pandas.io.sql.read\u sql()
命令将数据查询到dataframe中。我想把这些电话与这家伙所提倡的类似:()

类似于(非常一般):


这样做可能吗?

是的,这应该是可行的,不过需要注意的是,您需要在您所在站点的演讲中更改parallel_connection.py。在该代码中有一个
fetchall
函数,它并行执行每个游标,然后合并结果。这是您将要改变的核心:

旧代码:

def fetchall(self):
    results = [None] * len(self.cursors)
    def do_work(index, cursor):
        results[index] = cursor.fetchall()
    self._do_parallel(do_work)
    return list(chain(*[rs for rs in results]))
新代码:

def fetchall(self):
    results = [None] * len(self.sql_connections)
    def do_work(index, sql_connection):
        sql, conn = sql_connection  #  Store tuple of sql/conn instead of cursor
        results[index] = pd.read_sql(sql, conn)
    self._do_parallel(do_work)
    return pd.DataFrame().append([rs for rs in results])

Repo:

您的SQL数据库类型和驱动程序是什么,它们支持多线程调用吗?使用MS SQL server,它确实支持多线程调用不确定pyodbc,但自2013年以来,pymssql对于多线程似乎是线程安全的:是否可以显示一个关于如何实际传递查询的示例
SQL,conn=sql\u connection
基本上我们需要传递sql和connection?的元组。这已经有几年了,所以我不完全记得上下文-但是从链接的代码看,您将在
(sql,conn)
元组数组中传递给ParallelConnection的构造函数。类似于
ParallelConnection([(sql1,con1),(sql2,con2)])
这样在传递查询字符串时就不需要调用
execute()
?就像在问题中一样……在上面的示例中,我使用了
fetchall
而不是
execute
,但是您可以使用
execute
做同样的事情。使用元组数组初始化并行连接后,调用
execute
fetchall
,然后
\u do\u parallel
函数将工作传递给各个连接/查询。
def fetchall(self):
    results = [None] * len(self.sql_connections)
    def do_work(index, sql_connection):
        sql, conn = sql_connection  #  Store tuple of sql/conn instead of cursor
        results[index] = pd.read_sql(sql, conn)
    self._do_parallel(do_work)
    return pd.DataFrame().append([rs for rs in results])