代码之家  ›  专栏  ›  技术社区  ›  Chris

如何通过pyodbc以编程方式清除MSSQL调用中的临时内存使用

  •  0
  • Chris  · 技术社区  · 6 年前

    我已经建立了一个连接到MSSQL的进程,运行一个SP,通过pandas收回其摘要输出,打印到屏幕上,并通过电子邮件向我发送一份输出副本。

    这一切都如期进行,但在我运行它的最后两个晚上,我都注意到,这个过程的某些部分已经填满了我连接的服务器上的tempdb。

    作为python脚本的一部分,我已经包含了一个关闭连接的请求,但这种情况仍在发生,这让我认为这是pyodbc或从python内部运行SQL的固有特性。SP本身并不特别需要内存(在SSMS中运行SP不会产生此类问题),因此这不是特定于SQL的问题。

    pyodbc是否有某种内存释放方法,或者是否有其他方法可以在不需要手动调整以避免填充tempdb的情况下运行它?

    以下示例代码供参考:

    import pyodbc
    import pandas as pd
    
    conn = pyodbc.connect('''
                          TRUSTED_CONNECTION=Yes;
                          DRIVER={SQL Server};
                          SERVER={myServer};
                          DATABASE=myDB;''')
    
    
    r = pd.read_sql("exec [mySP]",conn)  
    print(r.to_string(index=False))
    
    conn.close()
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Karan M    6 年前

    尝试从pyodbc连接运行一个查询,看看它是否给出相同的结果,您可以运行一个简单的查询,如下所示:

      conn = pyodbc.connect("Driver={SQL Server};"
                              "Server=myServer;"
                              "Database=myDB;"
                              "Trusted_Connection=yes;")
        cursor = conn.cursor()
        cursor.execute('''
        SELECT TOP 100 * FROM table.db WHERE COLUMN.2 = 'something' ''' )
        for row in cursor:
            # print(row[1:3])
                row1 = row[2]
                return row1
    
        conn.close()