Python 使用pyodbc快速连接到SQL Server

Python 使用pyodbc快速连接到SQL Server,python,sql-server,pyodbc,Python,Sql Server,Pyodbc,我从消息总线获取json数据,并将该json转储到数据库中。我已经让psycopg2以每秒3000条的速度进入postgres了。由于一些原因,我们后来转向了SQL Server 2016,我的条目下降到每秒100条左右 我有一个名为insert_into()的函数,它将json插入数据库。我对insert_into()函数所做的全部工作就是将库更改为pyodbc和连接字符串。似乎每次调用我的函数(“conn”在下面的代码中)时,我的速度都会因为建立连接而减慢。如果我将设置连接的线路移到inse

我从消息总线获取json数据,并将该json转储到数据库中。我已经让psycopg2以每秒3000条的速度进入postgres了。由于一些原因,我们后来转向了SQL Server 2016,我的条目下降到每秒100条左右

我有一个名为insert_into()的函数,它将json插入数据库。我对insert_into()函数所做的全部工作就是将库更改为pyodbc和连接字符串。似乎每次调用我的函数(“conn”在下面的代码中)时,我的速度都会因为建立连接而减慢。如果我将设置连接的线路移到insert_into函数之外,我的速度就会恢复。我只是想知道两件事:

  • 从SQL Server的角度来看,设置这种连接的正确方法是什么
  • 在postrgres中,这是最好的方法吗 对于SQL Server,服务器是2016,使用ODBC驱动程序17,SQL身份验证

    SQL Server的速度较慢:

    def insert_into():
        conn = None
        try:
            conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=server1;DATABASE=json;UID=user;PWD=pass')
            cur = conn.cursor()
            for i in buffer_list:
                command = 'INSERT INTO jsonTable (data) VALUES (%s)' % ("'" + i + "'")
                cur.execute(command)
            cur.close()
            conn.commit()
        except (Exception, pyodbc.DatabaseError) as error:
            print(error)
        finally:
            if conn is not None:
                conn.close()
    
    conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=server1;DATABASE=json;UID=user;PWD=pass')
    
    def insert_into():
        #conn = None
        try:
            cur = conn.cursor()
            for i in buffer_list:
                command = 'INSERT INTO jsonTable (data) VALUES (%s)' % ("'" + i + "'")
                cur.execute(command)
            cur.close()
            conn.commit()
        except (Exception, pyodbc.DatabaseError) as error:
            print(error)
    
    This daemon runs 24/7 and any advice on setting up a fast connection to MSSQL will be greatly appreciated.
    
    SQL Server的Fast:

    def insert_into():
        conn = None
        try:
            conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=server1;DATABASE=json;UID=user;PWD=pass')
            cur = conn.cursor()
            for i in buffer_list:
                command = 'INSERT INTO jsonTable (data) VALUES (%s)' % ("'" + i + "'")
                cur.execute(command)
            cur.close()
            conn.commit()
        except (Exception, pyodbc.DatabaseError) as error:
            print(error)
        finally:
            if conn is not None:
                conn.close()
    
    conn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=server1;DATABASE=json;UID=user;PWD=pass')
    
    def insert_into():
        #conn = None
        try:
            cur = conn.cursor()
            for i in buffer_list:
                command = 'INSERT INTO jsonTable (data) VALUES (%s)' % ("'" + i + "'")
                cur.execute(command)
            cur.close()
            conn.commit()
        except (Exception, pyodbc.DatabaseError) as error:
            print(error)
    
    This daemon runs 24/7 and any advice on setting up a fast connection to MSSQL will be greatly appreciated.
    

    你的解决办法对我来说似乎是合法的。对于Postgres,您可能需要查看连接池。不过,我从来没有在SQLServer中使用过这个。您可以研究如何使用SSI,但我从在SQL Server的许多任务中使用SSI改为使用Python,因为SSI看起来非常敏感并且容易失败。