python - 将 SQL 结果捕获到变量
问题描述
我希望能够查询数据库并通过电子邮件发送结果:
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
import MySQLdb
import datetime
db = MySQLdb.connect("host","account","pass","db")
cursor = db.cursor()
cursor.execute("select report_date, ROUND(SUM(balance), 2) as 'Net', ROUND(SUM(short_mkt_value), 2) as 'Short', ROUND(SUM(int_balance ), 2) as 'Long' from intersum_recap where group_name = 'Carter' group by report_date order by report_date desc")
rows = cursor.fetchall()
for row in rows:
data = (', '.join([str(u) for u in row]))
toaddr = 'email'
fromaddr = 'email'
msg = MIMEMultipart()
msg['To'] = toaddr
msg['From'] = fromaddr
msg['Subject'] = 'Net Debit by Account'
body = data
msg.attach(MIMEText(body, 'plain'))
server = smtplib.SMTP('mail')
server.starttls()
server.login(fromaddr, 'pass')
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()
db.close()
运行脚本后,电子邮件仅包含查询应返回的第一行。如何将 sql 查询的整个迭代捕获到要在“msg”中打印的变量中
感谢所有帮助
解决方案
data
每次迭代都会覆盖您的变量。在循环外声明data
变量for
rows = cursor.fetchall()
data = ''
for row in rows:
data += (', '.join([str(u) for u in row]))+'\n'
推荐阅读
- google-cloud-platform - 为个人用户的 Google Cloud Platform 创建报告
- android - Navigation.findNavController(Activity, @IdRes int viewId) 中的第二个参数是什么
- qt - QStyledItemDelegate + QTreeView::setIndenation 导致文本绘制出现故障
- apache-kafka - 消费者仅从具有复制因子 3 和分区 1 的 3 代理配置中的特定代理读取
- javascript - dynamodb.put().promise() 不返回 put 对象
- java - 检测 HashMap 是否包含相同列表的更好方法
- git - 如何让 git 子模块使用相对路径?
- pandas - 在 Pandas 数据框中保留值
- wordpress - 一种从 Wordpress 将文件发送到 Google Drive 的方法?
- python - 图像到 0,1 文本