2017-01-10 4 views
1

Sybase Anywhere 데이터베이스 파일을 쿼리하기 위해 python과 sqlanydb를 사용하고있었습니다. 대부분의 쿼리는 일하고 있었다, 그러나 어떤 SELECT 쿼리는 특정 테이블을 포함 : 손상된 SQL Anywhere 테이블에서 sqlanydb 쿼리가 연결을 끊으면 OperationalError (Communication Error -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 예치에서 답 :]
나는 포기하고 백업 복사본으로 파일을 교체하고 문제가 멀리 갔다. 나는 어떻게 든 테이블이 손상되었다고 추측한다.