使用pyodbc

时间:2019-04-24 21:29:03

标签: python sql-server pyodbc

我正在从消息传递总线中获取json数据,并将该json转储到数据库中。我已经与psycopg2一起很好地工作了,每秒大约有3000个条目进入postgres。由于种种原因,我们此后移至SQL Server 2016,而我的条目下降到每秒100左右。

我有一个名为insert_into()的函数,可将json插入数据库。我对insert_into()函数所做的全部工作是将库更改为pyodbc和连接字符串。似乎我的速度下降是由于每次调用我的函数时都会进行设置然后断开连接(以下代码中的“ conn”)。如果将插入连接的行移到insert_into函数之外,我的速度就会恢复。我只是想知道两件事:

  1. 从SQL Server的角度来看,建立这样的连接的正确方法是什么?
  2. 这甚至是在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()

快速使用SQL Server:

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.

0 个答案:

没有答案