J'ai le script ci-dessous pour i) se connecter à une base de données, ii) lancer une requête, iii) sauvegarder les résultats de la requête en csv et iv) envoyer le sortie.Utiliser pymssql pour écrire en CSV et utiliser les noms de colonnes comme en-têtes
Tout fonctionne très bien, sauf que je n'arrive pas à obtenir les noms de colonnes comme en-têtes sur le fichier. J'ai parcouru SO, mais je ne trouve pas de solution qui fonctionne pour moi. Mon script est le suivant. Toute aide serait grande:
import pymssql
import csv
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email import encoders
fromaddr='[email protected]'
toaddr='[email protected]'
msg = MIMEMultipart()
msg['From'] = fromaddr
msg['To'] = toaddr
msg['Subject'] = "This is a test"
body = "This is still a test"
conn = pymssql.connect(server='XXXXXXXXXX.net',
port=XXXX,
user='XXXX',
password='XXXX',
database='XXXX')
cursor = conn.cursor()
query = 'Select * From Table'
cursor.execute(query)
with open("XXXXXXXX.csv","w") as outfile:
writer = csv.writer(outfile, quoting=csv.QUOTE_NONNUMERIC)
for row in cursor:
writer.writerow(row)
msg.attach(MIMEText(body,'plain'))
filename = "XXXXXX.csv"
attachment = open("XXXXXXXXXXX.csv","rb")
from email.mime.base import MIMEBase
part = MIMEBase('application','octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition',"attachment; filename= %s" % filename)
msg.attach(part)
text = msg.as_string()
server = smtplib.SMTP('smtp.office365.com',587)
server.starttls()
server.login(fromaddr,"XXXXXX")
text = msg.as_string()
server.sendmail(fromaddr,toaddr,text)
Cela a fonctionné très bien - merci beaucoup pour votre aide. –
Vous êtes les bienvenus! – bernie
vous pouvez aussi 'writer.writerows (cursor)' à la place de la boucle 'for'. – Davos