2014-11-02 4 views
0

파이썬을 사용하여 전자 메일의 로컬 데이터베이스를 만들려고합니다. Imapplib을 사용하여 Imap 서버에서 전자 메일을 읽습니다. 내 목표는 "SUBJECT", "SENDER", "RECEIVER"형식으로 추출 된 전자 메일을 로컬 MySql 데이터베이스로 푸시하는 것입니다.Imaplib의 결과를 "TypeError"로 이어지는 MySQL 데이터베이스로 푸시

로컬 데이터베이스를 만드는 코드를 작성하고 특정 메시지와 함께 전자 메일을 읽습니다. 데이터베이스 "EMAIL"에 결과를 푸시하는 코드를 만드는 방법을 모르겠습니다.

EDIT : 이전 메일 문제를 해결하고 데이터베이스에 추가하는 문제를 해결할 수있었습니다. 이제 MySQL에 대한 형식 변환 오류가 붙어 있습니다. 여기 내 새로운 스크립트입니다

cur.execute("DROP TABLE IF EXISTS EMAIL") 
cur.execute("CREATE TABLE email(email_to TEXT,email_from TEXT,email_header TEXT, email_msg TEXT)") 
con.close() 

: 여기

TypeError: not all arguments converted during string formatting

데이터베이스를 생성 스크립트의 일부입니다

def parse_email(raw_email): 
email_complete = email.message_from_string(raw_email) 
email_to = email_complete["To"] 
email_from = email_complete["From"] 
email_header = email_complete.items() 
email_msg = get_first_text_block(email_complete) 
con = MySQLdb.connect(host="127.0.0.1", # your host, usually localhost 
        user="admin", # your username 
        passwd="pwd", # your password 
        db="sec_crawl") # name of the data base 
con.cursor().execute("INSERT INTO email VALUES (?,?,?,?)", 
(buffer(str(email_to)),buffer(str(email_from)),buffer(str(email_header)),buffer(str(email_msg)))) 
con.commit() 

이 스크립트를 실행에, 나는 다음과 같은 오류가 발생합니다 오류에 대해 잘 모르겠습니다. 나는 일부 이전 질문

Python MySQLdb TypeError: not all arguments converted during string formatting

를 검색했다 그러나 문제는 여전히 존재. Windows 8에서 Python 2.7을 사용하고 있습니다.

답변

0

대신 % s을 사용해야합니까? like

con.cursor().execute("INSERT INTO email VALUES (%s,%s,%s,%s)", 
(buffer(str(email_to)),buffer(str(email_from)),buffer(str(email_header)),buffer(str(email_msg)))) 

'?' 일반적으로 MySQLdb가 지원하지 않는 prepared statement와 함께 사용된다.

+0

Perfect. 이것은 효과가 있었다. 나는 SQLite에서 선언문과 혼동을 느낀다. –