Python 3.x OSError:Errno 30只读文件系统:有没有办法在AWS Lambda中创建CSV并将其附加到Python的电子邮件中?
因此,我尝试创建一个Lambda函数来从MySQL数据库进行查询,并将查询输出写入CSV文件,将创建的文件作为附件附加,然后使用Python发送电子邮件 我有一个工作代码来实现这一点,但无法在AWS Lambda中执行相同的代码 下面是我正在编写的代码:Python 3.x OSError:Errno 30只读文件系统:有没有办法在AWS Lambda中创建CSV并将其附加到Python的电子邮件中?,python-3.x,amazon-web-services,aws-lambda,html-email,smtplib,Python 3.x,Amazon Web Services,Aws Lambda,Html Email,Smtplib,因此,我尝试创建一个Lambda函数来从MySQL数据库进行查询,并将查询输出写入CSV文件,将创建的文件作为附件附加,然后使用Python发送电子邮件 我有一个工作代码来实现这一点,但无法在AWS Lambda中执行相同的代码 下面是我正在编写的代码: engine = create_engine("mysql+pymysql://username:password@MYSQL DB Creds") con_mysql = engine.connect() #dump_attachment_
engine = create_engine("mysql+pymysql://username:password@MYSQL DB Creds")
con_mysql = engine.connect()
#dump_attachment_query_link
attach = pd.read_sql("SELECT * FROM some_table)",con_mysql)
#NAMING_FILES
#start,yest are dates
def filenames(start, yest):
if start == yest:
return "Dump_{}.csv".format(yest)
else:
return "Dump_{}_to_{}.csv".format(start, yest)
attach.reset_index(drop = True, inplace = True)
att = attach.to_csv(filenames(start, yest))
files = filenames(start, yest)
def send_mail(fromaddr, subject, message):
access_token, expires_in = refresh_authorization(GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_REFRESH_TOKEN)
auth_string = generate_oauth2_string(fromaddr, access_token, as_base64=True)
msg = MIMEMultipart('related')
msg['Subject'] = subject + ": %s" %yest
msg['From'] = fromaddr
msg['To'] = "receivers'mail"
msg.preamble = 'This is a multi-part message in MIME format.'
msg_alternative = MIMEMultipart('alternative')
msg.attach(msg_alternative)
part_text = MIMEText(lxml.html.fromstring(message).text_content().encode('utf-8'), 'plain', _charset='utf-8')
part_html = MIMEText(message.encode('utf-8'), 'html', _charset='utf-8')
msg_alternative.attach(part_text)
msg_alternative.attach(part_html)
part = MIMEBase('application', "octet-stream")
part.set_payload(open(files, "rb").read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', 'attachment; filename = {}'.format(files))
msg.attach(part)
server = smtplib.SMTP('smtp.gmail.com:587')
server.ehlo(GOOGLE_CLIENT_ID)
server.starttls()
server.docmd('AUTH', 'XOAUTH2 ' + auth_string)
server.sendmail(fromaddr,msg['To'].split(",") + msg['Cc'].split(","), msg.as_string())
server.quit()
当我使用代码时,我得到以下错误-[error]OSError:[Errno 30]只读文件系统:“Dump{}to{}.csv”
我对Lambda和Python很陌生。
非常感谢您提供的任何帮助。错误说明您无法写入文件系统。根据代码,您尝试在那里创建CSV文件。