我正在尝试使用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。
答案 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不支持的预准备语句一起使用。