2017-01-10 4 views
1

私はpythonとsqlanydbを使用してSybase Anywhereデータベースファイルを照会していました。ほとんどのクエリが働いていたが、任意のSELECTクエリは、特定のテーブルを含む: 破損したSQL Anywhereテーブルのsqlanydbクエリが接続を切断し、OperationalError(通信エラー-85)を生成します。

conn = sqlanydb.connect(**{"uid":"dba", "pwd":"sql", "dbf":"file.db"}) 
cursor = conn.cursor() 
cursor.execute("SELECT ... FROM ...") 

がOperationalErrorの結果、通信エラー-85が関与し、スタックトレースと、予想外の切断に。

--------------------------------------------------------------------------- 
OperationalError       Traceback (most recent call last) 
<ipython-input-24-2508c8b04dcc> in <module>() 
     1 sql = "SELECT ... FROM ..." 
     2 cursor = conn.cursor() 
----> 3 cursor.execute(sql) 
     4 query_columns = [desc[0] for desc in cursor.description] 
     5 rows_by_date = cursor.fetchall() 

/.../lib/python3.5/site-packages/sqlanydb.py in execute(self, operation, parameters) 
    788 
    789  def execute(self, operation, parameters =()): 
--> 790   self.executemany(operation, [parameters]) 
    791 
    792  def callproc(self, procname, parameters =()): 

/.../lib/python3.5/site-packages/sqlanydb.py in executemany(self, operation, seq_of_parameters) 
    759     operation = operation.encode(self.char_set) 
    760    self.new_statement(operation) 
--> 761    bind_count = self.api.sqlany_num_params(self.stmt) 
    762    self.rowcount = 0 
    763    for parameters in seq_of_parameters: 

/.../lib/python3.5/site-packages/sqlanydb.py in __stmt_get(self) 
    693    self.handleerror(InterfaceError, "no statement") 
    694   elif not self.__stmt: 
--> 695    self.handleerror(*self.parent.error()) 
    696   return self.__stmt 
    697 

/.../lib/python3.5/site-packages/sqlanydb.py in handleerror(self, errorclass, errorvalue, sqlcode) 
    687   if errorclass: 
    688    eh = self.errorhandler or standardErrorHandler 
--> 689    eh(self.parent, self, errorclass, errorvalue, sqlcode) 
    690 
    691  def __stmt_get(self): 

/.../lib/python3.5/site-packages/sqlanydb.py in standardErrorHandler(connection, cursor, errorclass, errorvalue, sqlcode) 
    377    cursor.messages.append(error) 
    378  if errorclass != Warning: 
--> 379   raise errorclass(errorvalue,sqlcode) 
    380 
    381 

OperationalError: (b'Communication error', -85) 

答えて

0

[リチャード・C葉からの答え:]
私はあきらめて、バックアップコピーを使用してファイルを交換して、問題が去っていきました。どうやらテーブルが壊れてしまったと私は推測している。

関連する問題