2011-03-10 4 views
1

이것은 많은 문맥을 가질 수없는 정말 불투명 한 오류이므로 명확히하는 데 도움이되는 질문을하십시오. 내가 할 수있는 한 많은 문맥을 너에게 주려고 노력할거야. 나는 현재 쉼표를 사용하여 MySQL 용 삽입 문의 전체 무리를 만드는거야SystemError : 연결이 비활성화되었습니다.

는 괄호 묘사 값 목록 (예 : insert into table (a, b, c) values (1,2,3),(4,5,6),(7,8,9);) 나는 ','그들을 삽입로 합류, 이러한 튜플의 수천을 만드는거야 분리 한 문장으로

문제는 내가 질문에서 오류가 발생했습니다.

필자는 새로운 삽입 문이있을 때마다 DB에 연결하기도했습니다. 내가 코드를 제공 할 수는 있지만, 모두 with 문 뒤에 숨겨져 있습니다.

나는 .... DB를에 연결에 대한 이유 누락을 할 볼

편집 : 왜 안. 여기에 코드가 있습니다. 루프에 대한 내부 : 데프의의

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

+0

@Ramy :'OdbcCommand'와'ExecuteNonQuery'에 익숙하지 않습니다. 사용하고있는 프레임 워크는 "Python Database API Specification v2.0"(http://www.python.org/dev/peps/pep-0249/)과 다소 다릅니다. 오류의 원인은 그 프레임 워크를 사용하는 방법과 관련이있을 수 있지만 사용중인 프레임 워크 나 db 드라이버에 상관없이 실제로 매개 변수화 된 SQL을 사용해야하고 'executemany'를 호출해야합니다. 뿐만 아니라 SQL 주입을 막을 수 있습니다. http://en.wikipedia.org/wiki/SQL_injection – unutbu

+0

odbc : http://msdn.microsoft.com/en-us/library/system.data. odbc.odbccommand.aspx – Ramy

관련 문제