Je souhaite utiliser une boucle for pour imprimer chaque date entre 2 dates. Va réellement fusionner ceci avec une requête MySQL pour passer la date dans la requête elle-même et dans le nom de fichier de la sortie.Création d'intervalles de date en Python
Alors, comment puis-je changer cela:
sum = 0
for i in range(1,11):
print sum
sum += i
à cela?
InputDate = '2009-01-01'
for i in range('2009-01-01','2009-07-01'):
print InputDate
InputDate += i
Je me rends compte qu'il ya quelque chose dans RRULE qui fait cette fonction exacte:
a = date(2009, 1, 1)
b = date(2009, 7, 1)
for dt in rrule(DAILY, dtstart=a, until=b):
print dt.strftime("%Y-%m-%d")
Mais, je suis limité à la version de python plus.
Ceci est la version de script shell de ce que je suis en train de faire, si cela aide à clarifier:
while [InputDate <= EndDate]
do
sql="SELECT Date,SUM(CostUsd) FROM DailyStats WHERE Date = '$InputDate' GROUP BY Date"
name=$(mysql -h -sN -u -p -e "$sql" > DateLoop-$InputDate.txt db)
echo "$name"
InputDate=$((InputDate + 1))
done
Alors, comment puis-je faire cela en Python? Ajouter une question de suivi ici pour plus de lisibilité.
Malheureusement, je ne peux pas utiliser la bibliothèque MySQL standard car nous avons une configuration propriétaire avec de nombreuses instances fonctionnant en parallèle. La seule façon d'exécuter ce type de requête est de se connecter à une instance à la fois, sur la ligne de commande.
en jour < = b: print "extrait Courir pour:" jour
sql = "SELECT date, SUM (CostUsd) de Statistique ðLorsque d.Date =" + jour + "GROUP BY Date"
os.system ('mysql -u -p -h -sN -e "+ sql +"> DateLoop- "+ jour +" txt db)
jour + = one_day
Merci balpha qui a fonctionné parfaitement. 1 question de suivi. Est-ce le bon moyen de transmettre la date en tant que variable ci-dessous: a = datetime.date (2009, 1, 1) b = datetime.date (2009, 7, 1) one_day = datetime.timedelta (1) jour = un en jour <= b: print "extrait Courir pour:" jour sql = "date SELECT, SUM (CostUsd) de Statistique ðLorsque d.Date = GROUP $ par jour par date" os.system ('mysql -h -sN -u -p -e "$ sql"> DateLoop-jour.txt db ') day + = one_day Je me rends compte qu'il existe des modules/bibliothèques pour exécuter ceci de python à MySQL, mais je préférerais utiliser la ligne de commande dans ce cas. Merci encore! –
C'est assez difficile à lire dans un commentaire. En plus de cela, comme vous le dites vous-même, vous devriez vraiment repenser la manière de la ligne de commande. L'utilisation de liaisons de bibliothèque est plus fiable, plus sûre et probablement aussi beaucoup plus facile que d'utiliser cette solution de ligne de commande. – balpha
En fait, je viens de confirmer que la ligne de commande est ma seule option dans ce cas. –