2016-05-24 10 views
0

Ich versuche, eine Anzahl von Stunden zu einem Zeitstempel in der folgenden Methode in Python zu einem Zeitstempel verkettet wurdenHinzufügen eine Zeiteinheit zu einem Zeitstempel mit SQL und Python

def add_hours(date, hour, duration): 

    conn = database_connect() 
    cur = conn.cursor() 
    val = None 

    start_time = date+" "+hour+":00:00" 

    try: 
     cur.execute("""SELECT timestamp %s + interval '%s hour' """,(start_time, duration)) 
     val = cur.fetchall() 
    except: 
     print("fetcherror") 

    cur.close() 
    conn.close() 
    return val 

Datum und Uhrzeit hinzuzufügen

(es wie ein SQL-Zeitstempel-Wert aussieht: 2016-5-24 18:00:00)

ich an der postgreSQL Dokumentation availiable hier ausgesehen haben: direkt http://www.postgresql.org/docs/8.0/static/functions-datetime.html und getestet, um die Abfrage (es funktioniert) Offensichtlich ist mein Fehler in der Python-Behandlung der Abfrage, aber ich kann nicht herausfinden, was es ist.

Was verstehe ich nicht?

+0

Welche Version von PostgreSQL verwenden Sie? In der Verknüpfung verweisen Sie auf die Version 8.0 aus der Dinosaurier-Ära. – java

Antwort

1

Sie müssen die vollständige Intervallvariable angeben, nicht nur den Zahlenteil. Und das Beste, verwenden Sie ein Datetime-Objekt für Ihre start_time:

start_time = datetime.datetime(2016, 05, 24, 12, 4, 0) 
duration = 4 
cur.execute("""SELECT timestamp %s + interval %s""", (start_time, '%s hours' % duration)) 
result = cur.fetchall() 
# -> [(datetime.datetime(2016, 5, 24, 16, 4),)] 
+0

Ich habe start_time = datetime.datetime (Jahr, Monat, Tag, Stunde, 0, 0) gemacht, wobei Jahr, Monat, Tag und Stunde ganze Zahlen sind. die execute-Anweisung funktioniert immer noch nicht –

+0

Mein Beispiel ergibt '[(datetime.datetime (2016, 5, 24, 16, 4),)] ', also was hast du genau gemacht. – Daniel

0

@Daniel Antwort richtig ist und funktioniert für mich. Das ist ein bisschen einfacher:

cur.execute (""" 
    SELECT timestamp %s + %s * interval '1 hour' 
    """, 
    (start_time, duration) 
) 
Verwandte Themen