将Imaplib的结果推送到Mysql数据库导致“TypeError”

时间:2014-11-02 18:16:55

标签: python mysql imaplib

我正在尝试使用Python创建我的电子邮件的本地数据库。 我正在使用Imaplib从Imap服务器读取电子邮件。我的目标是将提取的电子邮件推送到本地MySql数据库,格式为" SUBJECT"," SENDER"," RECEIVER"。

我已经建立了创建本地数据库,读取电子邮件(带有特定消息)的代码。 我不确定如何制作将结果推送到我的数据库" 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:并非在字符串格式化期间转换所有参数

以下是创建数据库的脚本部分:

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。

1 个答案:

答案 0 :(得分: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不支持的预准备语句一起使用。