2016-08-01 6 views
-1

일부 값을 테이블에 삽입하려고 할 때이 오류가 발생합니다.MySQL을 사용하는 동안 Dict 값을 삽입하십시오 INSERT INTO

def tsx_insert(self, d_list): 

for item in d_list: 

    query = """ INSERT IGNORE INTO tsx_first_insert(protocollo,procedura,oggetto,priorita, 
                tipo_richiesta,sottotipo_richiesta,emergenza, 
                richiesta,uo_richiedente,autore,scadenza_sla) 
       VALUES(%(protocollo)s,%(procedura)s,%(oggetto)s,%(priorita)s,%(tipo_richiesta)s, 
         %(sottotipo_richiesta)s,%(emergenza)s,%(richiesta)s,%(uo_richiedente)s, 
         %(autore)s,%(scadenza_sla)s)""" 

    values = item.values() 

    self.exec_query(query,values) 

그리고 여기 'exec_query'기능 : 여기 내 코드의

def exec_query(self, query, params): 
    try: 
     if self.connected is None: 
      self.connect() 

     self.cursor = self.connected.cursor() 
     self.cursor.connection.autocommit(True) 
     self.cursor.execute(query) 

     if self.cursor.description: 
      self.description = [d[0] for d in self.cursor.description] 

     self.rows = self.cursor.rowcount 
     self.sql_result = self.cursor.fetchall() 
    except MySQLdb.Error, e: 
     logging.error('Error {0}: {1}'.format(e.args[0], e.args[1])) 
    finally: 
     self.cursor.close() 

오류 : "오류 1064 : 당신은 당신의 SQL 구문에 오류가있다;에 해당하는 설명서를 확인을하여 '% (protocollo) s, % (procedura) s, % (oggetto) s, % (priorita) s, % (tipo_richiesta) s, '4 번 줄 근처에서 올바른 구문을 사용하는 MariaDB 서버 버전

나는 무엇이 문제인지 알아낼 수 없다. 당신의 도움에 미리 감사드립니다.

+0

당신은 그것을 당신이 매개 변수를 대체하는 것처럼 ... – e4c5

+0

의 가장 중요한 부분을 왼쪽으로 'values' 변수는 완전히 중복됩니다! – echo

+0

로 편집 e4c5 @ 오류 – bernie

답변

1

사전을 귀하의 self.cursor.execute() 메서드 호출에서 언급하는 것을 잊었으므로 매개 변수 문자열은 대체되지 않고 그대로 유지되었습니다.

시도는

self.cursor.execute(query, params) 
+0

을 그리고 있습니다하지 않습니다 전체 오류 메시지 – holdenweb

+0

그건 실수 였어, 고마워. 그러나 다른 오류가 있습니다 : query = query % tuple ([args의 항목에 대해 db.literal (item)])>> TypeError : format에 매핑이 필요합니다. – echo