Python pymssql尝试在结果挂起时启动新的Adaptive Server操作

时间:2016-04-19 00:34:42

标签: python sql-server pymssql

我有一个使用套接字和线程的Python脚本,允许10个服务器连接到一个端口。每个服务器都转储一串数据。有时,数据会快速进入,有时会涓涓细流。

Python脚本获取数据blob,执行子字符串计数以获得"列"值,然后使用pymssql将其发送到MSSQL。很直接。

这是脚本的MSSQL部分片段:

dbConn = pymssql.connect(server=mssql_server, user=mssql_user, password=mssql_pass, database=mssql_db)
cursor = dbConn.cursor()

date = data[0:6]
time = data[7:11]
duration = data[12:16]

mssql_output_raw = "('%s','%s','%s');" % (date, time, duration)
mssql_output = mssql_output_raw.replace(" ", "") # Remove any whitespace

# Write to MSSQL table
try:
    query = "INSERT INTO %s VALUES %s" % (mssql_table, mssql_output)
    cursor.execute( query )
    dbConn.commit()
except pymssql.OperationalError as e:
    logmsg("pymssql.OperationalError exception caught: %s" % str(e).replace("\n", " ") )
except:
    pass

每隔一段时间(也许当数据快速进入时?)我会得到这个例外:

20019, 
'DB-Lib error message 20019, severity 7:
Attempt to initiate a new Adaptive Server operation with results pending

脚本不会崩溃,因为脚本要么a)在后台运行;或者b)在前景但是喷出数据时,我不确定数据是否会进入MSSQL。

任何人都可以分享这个错误的含义吗?

1 个答案:

答案 0 :(得分:0)

我可能已经想到了这一点。在我的脚本中,我使用了线程。所有线程都有1个SQL连接器。我的猜测是,一个SQL连接器被所有查询所淹没。

我已更新了我的脚本,以便每个线程都有自己的连接器。到目前为止一切都很好。