2014-11-02 62 views
0

我正在嘗試使用Python創建我的電子郵件的本地數據庫。 我正在使用Imaplib從Imap服務器讀取電子郵件。我的目標是將提取的電子郵件以「SUBJECT」,「SENDER」,「RECEIVER」格式推送到本地MySql數據庫。將Imaplib的結果推送到導致「TypeError」的Mysql數據庫中

我已經構建了創建本地數據庫,讀取電子郵件(具體消息)的代碼。 我不確定如何製作將結果推送到我的數據庫「EMAIL」的代碼。

編輯:我已經設法解決了我以前解析郵件並將其添加到數據庫的問題。現在我被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

但問題仍然存在。 我在Windows 8上使用Python 2.7。

回答

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

完美。這工作。我對SQLite中的聲明感到困惑。 – 2014-11-03 08:41:12

相關問題