2013-04-02 120 views
0

我對python編程非常陌生,請在我身上輕鬆一下!python在運行另一個代碼之前運行一些代碼

我在查詢我的MySQL數據庫並將輸出寫入文件併發送結果電子郵件。但是,在寫入文件之前正在發送電子郵件。如何告訴我的代碼在發送電子郵件之前執行查詢並寫入文件

#!/usr/bin/python 
# Import smtplib for the actual sending function 
import smtplib 
import MySQLdb as mdb 
import sys 
import csv 

con = mdb.connect('localhost', 'myuser', 'mypassword', 'mydatabase'); 
with con: 
    cur = con.cursor() 
    cur.execute("SELECT * from vw_mail") 
    rows = cur.fetchall() 
c = csv.writer(open('/home/pi/mail.csv','wb')) 
c.writerows(rows) 

# Import the email modules we'll need 
from email.mime.text import MIMEText 

# Open a plain text file for reading. For this example, assume that 
# the text file contains only ASCII characters. 
fp = open('/home/pi/mail.csv','rb') 
# Create a text/plain message 
msg = MIMEText(fp.read()) 
fp.close() 

# me == the sender's email address 
# you == the recipient's email address 
msg['Subject'] = 'MySubject' 
msg['From'] = '[email protected]' 
msg['To'] = '[email protected]' 

# Send the message via our own SMTP server, but don't include the 
# envelope header. 
s = smtplib.SMTP('smtp.me.com') 
s.sendmail('[email protected]','[email protected]', msg.as_string()) 
s.quit() 
+0

?似乎可以使用['io.StringIO'](http://docs.python.org/3/library/io.html#io.StringIO)來存儲查詢結果。 – millimoose

回答

0

好像你不熟悉「與」語句,here是一個關於它的帖子。

在你的情況,你可以這樣做:

class query_database_and_mail: 
    def __enter__(self): 
     con = mdb.connect('localhost', 'myuser', 'mypassword', 'mydatabase'); 
     return con 

    def __exit__(self): 
     #put your send-email codes here 

with query_database_and_email() as con: 
    cur = con.cursor() 
    cur.execute("SELECT * from vw_mail") 
    rows = cur.fetchall() 
    c = csv.writer(open('/home/pi/mail.csv','wb')) 
    c.writerows(rows)  

沒有人會辛苦你們了,所以只是放鬆和隨意問:)

+0

非常感謝羅傑,聽起來像是一個計劃。回到書本上。 – user2234356

+0

如果你喜歡我的回答,你可以接受它,只需點擊下方選中標記,謝謝:) –

+0

我收到以下代碼: 'File「./mail.py」,第25行,在 與query_database_and_mail()作爲con: AttributeError:query_database_and_mail實例沒有屬性'__exit __'' – user2234356

0

的數據刷新到磁盤在c.writerows(rows)之後。請參閱here

0

您的問題來源於這樣的事實,當你做一個匿名的開放,像這樣:

c = csv.writer(open('/home/pi/mail.csv','wb')) 

Python會在程序結束時關閉打開的文件,那就是當它看起來好像它的實際寫入磁盤。

爲了解決這個問題,打開使用with statement文件,它會自動關閉該文件爲你:你爲什麼寫出來的行該盤在所有

with open('/home/pi/mail.csv','w') as the_file: 
    c = csv.writer(the_file) 
    c.writerows(rows) 
相關問題