mysql forloop в операторе select в python

1

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

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")

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

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

  • 0
    Я не думаю, что вам нужна петля в этом случае. Не могли бы вы просто найти, где все даты находятся в списке дат? Вы должны также параметризировать запрос, чтобы защититься от внедрения SQL и т. Д.
  • 0
    @DanielGale: в выражении sql это номер дня (от 0 до 6), который получается из дат в списке. Вот почему я пытаюсь использовать цикл. Вы можете помочь
Показать ещё 1 комментарий
Теги:
for-loop
python-2.7
mysql-python

1 ответ

0

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

Вариант 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 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)
  • 0
    Это не поможет мне, потому что он должен писать через forloop, потому что они являются другим оператором, включенным в SQL-оператор, как число дня, основанное на дате.
  • 0
    Можете ли вы помочь мне через цикл. уточняющий вопрос с условием.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню