Import habe ich ein Tupel wie untenWert Fehler beim Daten in Postgres-Tabelle mit psycopg2
data = ({'weather station name': 'Substation', 'wind': '6 km/h', 'barometer': '1010.3hPa', 'humidity': '42%', 'temperature': '34.5 C', 'place_id': '001D0A00B36E', 'date': '2016-05-10 09:48:58'})
Ich versuche, die Werte aus der obigen Tupel der Postgres-Tabelle mit dem Code unten zu drücken:
try:
con = psycopg2.connect("dbname='WeatherForecast' user='postgres' host='localhost' password='****'")
cur = con.cursor()
cur.executemany("""INSERT INTO weather_data(temperature,humidity,wind,barometer,updated_on,place_id) VALUES (%(temperature)f, %(humidity)f, %(wind)f, %(barometer)f, %(date)s, %(place_id)d)""", final_weather_data)
ver = cur.fetchone()
print(ver)
except psycopg2.DatabaseError as e:
print('Error {}'.format(e))
sys.exit(1)
finally:
if con:
con.close()
Wo Datentyp jedes Feld in der DB als unten: id Serien NOT NULL,
temperature double precision NOT NULL,
humidity double precision NOT NULL,
wind double precision NOT NULL,
barometer double precision NOT NULL,
updated_on timestamp with time zone NOT NULL,
place_id integer NOT NULL,
Wenn ich den Code ausführen, um die Daten mit psycopg2 in Postgres-Tabelle zu pushen, verursacht es einen Fehler "ValueError: unsupported format character 'f'"
Ich hoffe, das Problem besteht in der Formatierung. Bin mit Python3.4
Ich habe versucht, alle Platzhalter Wechsel zu% s. Aber ich erhalte TypeError: Tuple-Indizes müssen ganze Zahlen sein, nicht str. – Harnish
Alle Daten, die Sie im 'dict' haben, haben ein String-Format, z. "Wind": "6 km/h", während Sie erwarten, dass die Winddoppelpräzision NICHT NULL ist, was ein doppelter Wert ist. Sie müssen zuerst einen Konverter schreiben, der die Daten, die Sie haben, explizit zu dem formatiert, was in die Datenbank eingegeben werden soll, und dann zu Postgres für das Einfügebit kommen. – AKS
Nun, ich habe den Feld-Datentyp geändert, um Zeichen zu variieren. Jetzt habe ich versucht, alle Platzhalter auf% s zu ändern. Immer noch der Fehler "TypeError: Tupel-Indizes müssen ganze Zahlen sein, nicht str." bleibt gleich. – Harnish