2014-11-02 1 views
0

Я пытаюсь создать локальную базу данных моего письма с помощью Python. Я использую Imaplib для чтения электронной почты с сервера Imap. Моя цель - нажать извлеченные электронные письма в локальную базу данных MySql в формате «SUBJECT», «SENDER», «RECEIVER».Нажатие результатов Imaplib на базу данных Mysql, приводящую к «TypeError»

Я создал код, который создает локальную базу данных, читает электронные письма (с определенным сообщением). Я не уверен, как создать код, который подталкивает результаты к моей базе данных «EMAIL».

EDIT: Мне удалось решить мою предыдущую проблему разбора писем и добавления ее в базу данных. Теперь я застрял с ошибкой преобразования типа для Mysql. Вот мой новый сценарий:

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() 

На выполнение этого сценария, я получаю следующее сообщение об ошибке:

TypeError: not all arguments converted during string formatting

Вот часть сценария, который создает базу данных:

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() 

Я не уверен в ошибке. Я сделал поиск некоторые предыдущие вопросы

Python MySQLdb TypeError: not all arguments converted during string formatting

Но проблема все еще существует. Я использую Python 2.7 на Windows 8.

ответ

0

вам нужно использовать% s вместо? например

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 не поддерживает.

+0

Perfect. Это сработало. Я запутался с объявлением в SQLite. –