jetzt hab ich nur noch ein kleines Problem,
wie setzt sich die Uhrzeit funktion zusammen?
Man kann zwar aus meiner csv die uhrzeit mit milisekunden auslesen, ich will diese letzte Stelle aber nicht in meiner SQL tabelle haben.
danke schon ma

glg tim
Traceback (most recent call last):
File "C:\Dokumente und Einstellungen\Admin\Desktop\Python_script.py", line 24, in -toplevel-
d, m, y = ( int(val) for val in row[2].split(".") )
File "C:\Dokumente und Einstellungen\Admin\Desktop\Python_script.py", line 24, in <generator expression>
d, m, y = ( int(val) for val in row[2].split(".") )
ValueError: invalid literal for int(): 23:11:35:331
Code: Alles auswählen
import psycopg2
import csv
import datetime
# Datenbank-Connection und -Cursor erstellen
conn = psycopg2.connect(user = "Import", password = "import", database = "GBC")
cur = conn.cursor()
# CSV-Datei öffnen
f = file("neu.csv", "r")
# CSV-Datei dem Parser übergeben
csvdata = csv.reader(f, delimiter = ';')
# Jede, nicht leere, Zeile durchlaufen
for row in ( row for row in csvdata if row ):
#
# Daten vorbereiten (in den korrekten Datentyp umwandeln)
#
data = []
data += row[1]
# Datum
d, m, y = ( int(val) for val in row[2].split(".") )
data.append(datetime.date(y, m, d))
# Uhrzeit
H, M, S = ( int(val) for val in row[3].split(":") )
data.append(datetime.time(H, M, S,))
# Eingangsport und Ausgangsport, Eingangsnummer und Ausgangsnummer
data += [int(row[4]), int(row[5]), row[6] or None, row[7] or None]
# Dauer
try:
data.append(int(row[8]))
except ValueError:
data.append(None)
# Fehler
data.append(row[9].strip())
#
# Daten in DB schreiben
#
sql = """
INSERT INTO call (
callrefnummer
datum,
uhrzeit,
eingangsport,
ausgangsport,
A-Nummer,
B-Nummer,
dauer,
Releasecode
) VALUES (
%s, %s, %s, %s, %s, %s, %s, %s
)
"""
try:
cur.execute(sql, data)
except psycopg2.IntegrityError, errdata:
if "c_call_unique" in str(errdata):
conn.rollback()
else:
raise
# Commit nach jedem "execute", da bei Fehler ein "Rollback" durchgeführt wird.
conn.commit()
# CSV-Datei schließen
f.close()
# Anzeigen
sql = "SELECT * FROM call"
cur.execute(sql)
print cur.fetchall()
# Datenbankverbindung trennen
cur.close()
conn.close()
cur.execute(sql, data)
# Commit
conn.commit()
# CSV-Datei schließen
f.close()
# Anzeigen
sql = "SELECT * FROM daten"
cur.execute(sql)
print cur.fetchall()
# Datenbankverbindung trennen
cur.close()
conn.close()
CREATE TABLE call
(
callrefnummer varchar(50) NOT NULL,
datum date,
uhrzeit time,
eingangsport int4,
ausgangsport int4,
eingangsnummer varchar(50),
ausgangsnummer varchar(50),
dauer int4,
releasecode varchar(50),
CONSTRAINT call_pkey PRIMARY KEY (callrefnummer)
)
WITHOUT OIDS;
ALTER TABLE call OWNER TO "Tim";
18471;21.07.2006;23:17:48:057;5;11;966506485768;22796581027;;CAU_NCC
18472;21.07.2006;23:18:16:107;5;11;33147700610;22796587000;;CAU_NOCAV
18473;21.07.2006;23:21:21:814;5;11;21851620113;22796589192;11762;CAU_NCC
Hi Tim!BoOnOdY hat geschrieben:ich hab die milisekunden entfernen wollen, und noch eine neue Spalte dazu machen wollen,
Code: Alles auswählen
print "row:", row
print "row[0]:", row[0]
print "row[1]:", row[1]
Code: Alles auswählen
H, M, ms = "13:11:056".split(":") # OK
H, M = "13:11:056".split(":") # Fehler
Hi!gerold hat geschrieben:- text ??? --> varchar(maximale Feldgröße)Code: Alles auswählen
#CREATE TABLE call ( [...] # eingangsnummer varchar(50),
Hi Tim!BoOnOdY hat geschrieben:Wenn die Fehlerrückgabe aus der PostgreSQL war, dass der Primary Key Doppelt war, dann schreibe den Datensatz in ein "log" file und mache normal weiter.
Hi Tim!BoOnOdY hat geschrieben:also mir gehts darum wie ich das dann in ne text datei schreibe.
Ist dieses "rollback" einfach der ausdruck dafür, das er weiter macht und den Datensatz überspringt?
Code: Alles auswählen
BEGIN;
INSERT INTO adressen (vorname, nachname) VALUES ('Gerold', 'Penz');
INSERT INTO adressen (vorname, nachname) VALUES ('Ludwig', 'Bucher');
COMMIT;