2012-05-18 2 views
0

나는 python 스크립트를 작성하여 HTML 페이지를 구문 분석하고 일부 문자열을 얻은 다음 mysql 테이블에 기록합니다. 데이터베이스 연결에 MySQLDb 모듈을 사용하고 있습니다. 검색된 문자열은 ISO-8859-7 (그리스어)로 인코딩되며, 이는 MySQL 테이블의 기본 인코딩이기도합니다. ,국제화 - Python MySQLDb 및 ISO-8859-7

def db_write(list) : 
    import MySQLdb as sql 
    try : 
     con = sql.connect(//database info here//) 
    except : 
     print "could not connect to database" 
     exit() 
    cur = con.cursor() 
    for i in my_range (8,len(list)-2,2) : 
     query = 'INSERT INTO as_doy VALUES (%s,"%s")' % (list[i],list[i+1]) 
     print query   
     try : 
      cur.execute(query) 
      con.commit() 
     except : 
      print "failed" 
      con.rollback() 
    con.close() 

난 ISO-8859-7에서 UTF-8, 디코딩 및 재 인코딩의 문자열을 인코딩하는 시도 ERROR 1366 (HY000): Incorrect string value: '\xEF\xBF\xBD\xEF\xBF\xBD...'

이다 얻을 예외 : 예외를 생성하는 코드는 다음과 같다 그러나 아무것도 나를 위해 아직 일하지 않고 있었다.

+0

어떤 줄에 예외가 있습니까? –

+0

try 블록이 실패하고 mysql 콘솔의 오류 코드가 발생합니다 –

+1

이 스크립트는 SQL 삽입에 취약합니다. 이 값을 수정하면 (아마도 적절한 쿼리 매개 변수를 사용하여) 값이 (처음에는 저장되었지만) 올바르게 db에 전송 될 수 있습니다. –

답변

1

charset 인수를 .connect()으로 전달하여 연결 순서가 올바른지 확인하거나 쿼리를 실행하기 전에 SET NAMES utf8 (또는 이와 동등한 항목)을 실행하십시오.

자세한 내용은 this link을 참조하십시오.

+0

훌륭한 튜토리얼을 주셔서 감사합니다. 누군가가 같은 문제를 겪고 있다면, iso-8859-7 charset은 "그리스어"이고 "latin7"이 아닙니다. –