MySQL forloop в операторе выбора в питоне

голоса
1

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

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

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

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

Задан 19/09/2018 в 12:59
источник пользователем
На других языках...                            


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'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
  • операторы SQL с параметрами (более безопасными, более быстрый способ передачи параметров в SQL-предложения)
Ответил 19/09/2018 в 13:03
источник пользователем

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