mysql forloop в операторе select в python - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть список дат.

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

. Запрос на выборку должен быть отправлен на указанные даты и сохранен в 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")

Это работает для одной даты без цикла.Mysql внутри цикла не работает.Нет ошибок, но данные не записываются.Я написал функцию with за пределами цикла, но данные не записываются в CSV.

Помогите мне, пожалуйста

1 Ответ

0 голосов
/ 19 сентября 2018

Два варианта.

Вариант 1: Используйте a для добавления вместо перезаписи во время каждого цикла с w.Например:

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

Вариант 2 (лучше): используйте предложение SQL in следующим образом:

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)

И еще одна вещь: если строка Python не будет многократнойлинии, вам не нужно """.Просто используйте один ".

Также вы узнаете, как использовать:

  • Формат строки Python
  • SQL-операторы с параметрами (более безопасный и быстрый способ передачи параметров в предложения SQL)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...