mysql forloop na instrução select em python

votos
1

eu tenho lista de datas

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

selecione consulta deve Flech para as datas dadas e armazenar no arquivo 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)

Isso está funcionando data única para sem forloop. Mysql dentro para o laço não está a funcionar. Nenhum erro, mas os dados não são gravados. Eu escrevi o com função fora para o laço, mas não dados são gravados em formato CSV.

Ajude-me, por favor

Publicado 19/09/2018 em 12:59
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

Duas opções.

Opção 1: Use apara acrescentar em vez de substituir durante cada ciclo com w. Como isso:

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

Opção 2 (melhor): use do SQL incláusula como esta:

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)

E mais uma coisa: se a sua seqüência de python não vai abranger várias linhas, você não precisa """. Basta usar um único ".

Além disso, aprender a usar:

Respondeu 19/09/2018 em 13:03
fonte usuário

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