mysql forloop dans l'instruction select en python

voix
1

j'ai liste des dates

datefromto=['2018-06-16','2018-08-10','2018-09-12']

sélectionnez requête doit Flech pour les dates et stocker dans le fichier csv

for dates in datefromto:
      yesterbilling=select * from student_date where date(datetime)= +str(dates)+ and daynumber=+str(time.strftime(%w, time.strptime(dates, %Y-%m-%d)))+ and status='attended' 
      cursor.execute(yesterbilling)
      yesterbillings = cursor.fetchall()

     myFile = open(students.csv, 'w')
     with myFile:
        writer = csv.writer(myFile)
        writer.writerows(yesterbillings)

    print(Writing complete)

Cela fonctionne à ce jour unique sans forloop. Mysql à l'intérieur de la boucle ne fonctionne pas. Pas d'erreur, mais les données ne sont pas écrites. J'ai écrit la fonction avec l'extérieur pour la boucle, mais aucune donnée est écrit dans csv.

Aidez-moi s'il vous plaît

Créé 19/09/2018 à 12:59
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Deux options.

Option 1: utiliser apour annexer au lieu de l' écraser pendant chaque boucle avec w. Comme ça:

myFile = open(students.csv, 'a')

Option 2 (mieux): utiliser SQL inclause comme ceci:

yesterbilling="select * from student_date where date(datetime) in ('" + "','".join(datefromto) + "') and status='attended' "
cursor.execute(yesterbilling)
yesterbillings = cursor.fetchall()

# now it's safe to use 'w' because the writing will be done at once
myFile = open(students.csv, 'w') 
with myFile:
    writer = csv.writer(myFile)
    writer.writerows(yesterbillings)

Et une chose: si votre chaîne de python ne sera pas sur plusieurs lignes, vous n'avez pas besoin """. Il suffit d' utiliser un seul ".

En outre, apprendre à utiliser:

  • format de chaîne Python
  • instructions SQL avec des paramètres (plus sûr, plus rapide façon de passer des paramètres à des phrases SQL)
Créé 19/09/2018 à 13:03
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more