Как использовать диапазон дат в python для вывода / запроса данных в mySQL

Как я могу потянуть данные в mySQL днем, используя дату python? Скажем, я хочу, чтобы day1 и day2 (или день за day1 ) повторялись в течение n раз

Так что мне нужна дата в выражении «где» SQL, чтобы выглядеть как ниже в каждой итерации ( n раз)

  • Вопрос Python: Год и День Года на сегодняшний день?
  •  day1 >= '2012-01-01' and day2 < '2012-01-02' ( n = 1 ) day1 >= '2012-01-02' and day2 < '2012-01-03' ( n = 2 ) . . day1 >= yesterday and day2 < today ( n times ) 

    ,

     Start_date = '2012-01-01' <- How can I write this in python End_date = Today() <- and this 

    Чтобы написать:

     for each iteration .. con.execute("select * from table where date >= day1 and date < day2" ) 

  • SQLite Performance Benchmark - почему: память: такая медленная ... только в 1,5 раза быстрее, чем на диске?
  • Храните простые пользовательские настройки в Python
  • Надежная и эффективная база данных с ключом для Linux?
  • Python Disk-Based Dictionary
  • mysql error: ERROR 1018 (HY000): Не удается прочитать директорию '.' (errno: 13)
  • Как я могу сегментировать код для тестирования производительности с помощью Pythons timeit?
  • 3 Solutions collect form web for “Как использовать диапазон дат в python для вывода / запроса данных в mySQL”

    Вам нужен модуль datetime : –

     import datetime start = datetime.date(2012,01,01) next = start + datetime.date.resolution while next <= datetime.date.today(): print start, next con.execute(""" select * from table where date >= %s and date < %s """, (start, next)) start = next next = start + datetime.date.resolution 

    ВАЖНОЕ ЗАМЕЧАНИЕ : я обновил ответ, чтобы исправить серьезную проблему. Никогда не используйте форматирование строк (aka % ) для построения SQL-запросов, так как оно открыто для серьезных проблем, включая SQL-инъекцию . Используйте Python-<db_driver> api, где почти все RDMBes предлагают одинаковый синтаксис

     execute("select * from blah where x=%s AND y=%s", (x, y)) ^ ^ ^ 1 1 2 

    1] Нет цитаты,
    2] Нет форматирования строк

    Используйте класс datetime с функцией strftime .

    Класс datetime используется для создания объекта, который представляет определенную дату и время. Функция strftime преобразует ее в определенную строку в соответствии с выбранным форматированием.

    Согласно документации MySQL , стандартное форматирование даты и времени YYYY-MM-DD HH:MM:SS .

    Вот пример, который должен работать:

     day1 = datetime.datetime(2012, 1, 1).strftime('%Y-%m-%d %H:%M:%S') day2 = datetime.datetime(2012, 1, 2).strftime('%Y-%m-%d %H:%M:%S') con.execute("select * from table where date >= %s and date < %s", (day1, day2)) 

    Если вы хотите сделать дополнительные запросы, просто создайте соответствующие объекты datetime.datetime в каждом раунде цикла. Например:

     for i in xrange(1, 10): # ... day2 = datetime.datetime(2012, 1, i).strftime('%Y-%m-%d %H:%M:%S') # ... 

    Используйте объекты datetime.date . Они замечательные вещи, потому что с ними вы можете:

    • легко вычислить сегодня ( dt.date.today() ),
    • легко вычислить на следующий день ( start + dt.timedelta(days = 1) ,
    • сравнить даты (например, start < end )
    • con.execute их непосредственно в con.execute . Нет необходимости предварительно форматировать их как строки.

     import datetime as dt start = dt.date(2012,1,1) end = dt.date.today() while start < end: nextday = start + dt.timedelta(days = 1) con.execute("select * from table where date >= %s and date < %s", (start, nextday)) start = nextday 
    Python - лучший язык программирования в мире.