2014-11-26 6 views
0

먼저 로컬에 저장된 크롤링 된 HTML 페이지를 저장해야합니다. 나는 성공적으로Python에서 MySQL에 HTML 저장

myHTML = open(file_location,'r').read() 

출력을 사용하여 파일을 여는하고는 여기에서 볼 수 있습니다 : http://shrib.com/jqR5uf0C

나는 또한 성공적으로 SQL 쿼리를 만들

는 :

query_insert = ("insert into job_html (processid, myURL, myhtml) VALUES (%d, %s, %s)", processid, my_url, str(myHTML)) 

하지만 어떤 이유로

되는 HTML 이스케이프되지 제대로 파이썬이나 수동으로 삽입 할 수 없습니다.

또한 다음과 같은 파이썬 오류가 점점 오전 :

AttributeError: 'tuple' object has no attribute 'encode' 

어떤 도움 파이썬 초보자 ;-)에서 감사를

코드 :

데프 extractText (file_location, 프로세스 id, my_url) :

import mysql.connector 

iwr_db = mysql.connector.connect(user='iwr', password='iwr', 
          host='127.0.0.1', 
          database='iwr_1') 

myHTML = open(file_location,'r').read() 
query_insert = ("insert into job_html (processid, myURL, myhtml) VALUES (%d, %s, %s)", processid, my_url, str(myHTML)) 
print query_insert 

cursor_insert = iwr_db.cursor(buffered=True) 
cursor_insert.execute(query_insert) 
iwr_db.commit() 
+2

a) 실제 MySQLdb 실행 호출과 b) 전체 추적? 동일한 기능의 –

+0

. HTML을 간단한 문자열로 바꿀 때 제대로 작동합니다. SQL 쿼리를 출력하고 수동으로 mysql에 삽입하려고하면 실패한다. '추적 장치'가 의미하는 바를 모르겠 음 – Markus

+1

한숨. 내가 "어디 있는지"라고 말하면 "게시 할 수 있습니까?"라는 의미입니다. –

답변

0

문제는 튜플 (tuple)로 쿼리를 작성한 다음 execute 명령에 직접 전달하려고합니다.

query = ('foo', bar, baz) 
execute(query) 

이 :

난 당신이이 차이에 대해 혼란스러워하고 있다고 생각

execute('foo', bar, baz) 

처음에, 당신은 다음과 같이 execute에 전달되는 튜플을 정의 단일 매개 변수 - 따라서 튜플에 대한 오류 메시지. 두 번째 단계에서는 물론 세 개의 개별 매개 변수를 execute에 전달합니다.

당신 당신이 실행 호출 할 때 "튜플 풀고"라고 무엇을 사용하여이 문제를 해결할 수 :

execute(*query) 

을하지만, 단순히 하나 개의 변수로 쿼리 문자열을 정의하는 쉬운에 의해 것 귀하의 경우와 패스 나머지는 직접 실행합니다 :

query_insert = "insert into job_html (processid, myURL, myhtml) VALUES (%s, %s, %s)" 
cursor.execute(query_insert, processid, my_url, str(myHTML)) 

(

또한 그들은 정수 경우에도 MySQLdb 쿼리 문자열에 모든 매개 변수 %s를 사용해야합니다.)

+0

Daniel이 완벽하게 작동했습니다. 인수 집합 주위에 대괄호를 추가해야했습니다. cursor.execute (query_insert, (processid, my_url, str (myHTML)))) – Markus