2017-03-16 8 views
0

私は電子メールにselect文を挿入しようとしています。テーブル には10行3列ありますが、できません。以下のコードとエラー。pythonでmysql select文をメールで送信

#!/usr/bin/env python 
import csv 
import MySQLdb 
import pysftp 
import smtplib 
import sys 
import os 
from email.mime.multipart import MIMEMultipart 
from email.mime.text import MIMEText 
conn = MySQLdb.connect(XXXX) 
#Email Part1 Msg 
part1 = """ 
To: To Person <> 
MIME-Version: 1.0 
Content-type: text/html 
Subject: SMTP HTML e-mail test 
""" 
sender = '' 
receivers = 
x = conn.cursor() 
query1= ("""select * from table""") 
smtpObj=smtplib.SMTP('smtp', 25) 
smtpObj.sendmail(sender, receivers, x.execute(query1)) 

これはエラーmesssageです:

Traceback (most recent call last): 
    File "test3.py", line 33, in <module> 
    smtpObj.sendmail(sender, receivers, x.execute(query1))   
    File "/usr/lib/python2.7/smtplib.py", line 729, in sendmail 
    esmtp_opts.append("size=%d" % len(msg)) 
TypeError: object of type 'long' has no len(
+0

説明と分かれたコード。説明文を明確にしました。 –

答えて

1

あなたはsmtpObj.sendmail()への第三引数として文字列で渡す必要があります。 x.execute(query1)を実行した後、結果をフェッチして文字列に変換する必要があります。

x.execute(query1) 
msg = "" 
for row in x.fetchall(): 
    msg += str(row) # or however you turn a row into a string 
smtpObj.sendmail(sender, receivers, msg) 
+0

これはうまくいった、ありがとう、私は実際にテーブルから列を選択したそれは括弧と一重引用符で行に来ていた。これは文字列に変換するためですか?新しい行の各行を取得する方法はありますか? これは出力です。 ( 'テストエラー' )(なし、)( 'テストエラー'、)( –