2011-03-10 66 views
1

這是一個非常模糊的錯誤,我似乎無法獲得大量的上下文,因此請提出任何可能有助於澄清的問題。我會盡量給你儘可能多的背景。SystemError:連接已被禁用

我使用的是逗號目前正在創建一大堆的INSERT語句爲MySQL分離括號劃定值的列表(即insert into table (a, b, c) values (1,2,3),(4,5,6),(7,8,9);)我要創建這些元組的一千年,用「」和插入他們加入他們在一個聲明中。

問題是我得到的問題中的錯誤。

我甚至在每次插入新語句時都要連接到數據庫。如果你願意的話,我可以提供代碼,但是這一切都隱藏在with聲明之後。

我看不出有任何理由連接到數據庫被丟棄....

編輯:爲什麼不呢?這是代碼。裏面一個for循環:

with SQLConnection(DATASOURCES[SCHEDULEDB]) as db: 
    db.execute_sql(command + ' ' + ','.join(block) + ';') 

夫婦高清的的:

def execute_sql(self, query): 
    if query.startswith('select'): 
     return self.execute_read(query) 
    else: 
     return self.execute_other(query) 

def execute_other(self,query): 
    adapter = OdbcCommand(query,self.connection) 
    adapter.ExecuteNonQuery() 
    return True 

回答

0

事實證明,有些我試圖插入DB值都是比我爲它分配將varchar大小。例外情況不是很有啓發性。我結束了檢查,以確保我插入的每個值都小於分配給它的大小,如果不是,則會引發異常。

1

我不知道爲什麼你得到你所得到的錯誤。也許它與創建非常長的SQL語句有關?無論如何,你應該總是使用參數化的SQL語句;避免手工編寫SQL(帶參數):

sql = 'INSERT INTO table (a,b,c) VALUES (%s,%s,%s)' 
args = [(1,2,3),(4,5,6),(7,8,9)] 
cursor.executemany(sql, args) 
+0

請看我的編輯,我不確定這是否是問題,儘管它可能是。 – Ramy 2011-03-10 19:26:18

+0

@Ramy:我不熟悉'OdbcCommand'和'ExecuteNonQuery'。您使用的框架與「Python數據庫API規範2.0版」(http://www.python.org/dev/peps/pep-0249/)看起來頗爲不同。錯誤的來源可能與您如何使用該框架有關,但無論您使用的是哪種框架或數據庫驅動程序,您都應該使用參數化SQL並調用'executemany'。它不僅更容易,而且可以幫助防止SQL注入:http://en.wikipedia.org/wiki/SQL_injection – unutbu 2011-03-10 19:42:12

+0

odbc:http://msdn.microsoft.com/en-us/library/system.data。 odbc.odbccommand.aspx – Ramy 2011-03-10 19:48:17