我正在使用此代码将我的数据库与客户端同步:
import pyodbc
SYNC_FETCH_ARRAY_SIZE=25000
# define connection + cursor
connection = pyodbc.connect()
cursor = connection.cursor()
query = 'select some_columns from mytable'
cursor.execute(query)
while True:
rows = cursor.fetchmany(SYNC_FETCH_ARRAY_SIZE) # <<< error here
if not rows:
break
insert_to_our_db(rows)
cursor.close()
Run Code Online (Sandbox Code Playgroud)
我间歇性地收到以下错误:
File "....py", line 120, in ...
rows = sg_cur.fetchmany(SYNC_FETCH_ARRAY_SIZE)
pyodbc.OperationalError: ('08S01', '[08S01] [Microsoft][ODBC Driver 17 for SQL Server]TCP Provider: Error code 0x68 (104) (SQLGetData)')
Run Code Online (Sandbox Code Playgroud)
我应该如何处理这个错误?这是连接上的错误(因此我需要关闭并重新创建连接)还是光标上的错误,我只需要添加重试?
我将添加以下内容来重试(代替抛出错误的行),这足以解决问题吗?如果我遇到 TCP 错误,重试会有任何影响吗?
File "....py", line 120, in ...
rows = sg_cur.fetchmany(SYNC_FETCH_ARRAY_SIZE)
pyodbc.OperationalError: ('08S01', '[08S01] [Microsoft][ODBC Driver 17 for SQL Server]TCP Provider: Error code 0x68 (104) (SQLGetData)')
Run Code Online (Sandbox Code Playgroud)
编辑:
github 上有一个关于此问题的问题。与此同时,可行的解决方法是什么?
insert_to_our_db在我们的数据库中,然后从那里重新启动,以防出现错误笔记:
我意识到我要插入的表没有索引。
为了添加行,我正在运行更新插入,以避免重复。在表中添加索引解决了我的问题。
看看其他遇到此问题的人,这似乎是公认的解决方案。无论如何,我绝对应该对表格建立索引——吸取教训。
编辑。 我不会接受这个答案,希望有人能够对这个问题有更多的了解。但对我来说,添加索引(加快了交易速度)解决了问题。