BoOnOdY hat geschrieben:kann es sein das ich irgend nen falschen Befehl benutzt hab ? müssen die Fragezeichen noch durch was ersetzt werden?
ich habs genau so ausgeführt.
[...]
Code: Alles auswählen
CREATE TABLE "Call"
(
"Datum" text NOT NULL,
"Uhrzeit" text,
"Eingangsport" int2,
"Ausgangsport" int2,
"Eingangsnummer" text,
"Ausgangsnummer" text,
"Dauer" int2,
"Fehler" text
)
WITHOUT OIDS;
ALTER TABLE "Call" OWNER TO "Tim";
Hi Tim!
- Erstelle dir immer einen Primärschlüssel. (im Beispiel "id")
- int2 würde ich auf int4 erhöhen.
- text ??? --> varchar(maximale Feldgröße)
- Bei leeren Feldern, statt einem leeren String None übergeben (= vielleicht besser)
- Bei *psycopg2* ist ``%s`` als Platzhalter bei ``execute()`` und ``executemany()`` einzusetzen
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
#CREATE TABLE call (
# id serial PRIMARY KEY,
# datum date,
# uhrzeit time,
# eingangsport int4,
# ausgangsport int4,
# eingangsnummer varchar(50),
# ausgangsnummer varchar(50),
# dauer int4,
# fehler varchar(50)
#) WITHOUT OIDS;
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("02.08.2006.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 = []
# Datum
d, m, y = ( int(val) for val in row[0].split(".") )
data.append(datetime.date(y, m, d))
# Uhrzeit
H, M, S, ms = ( int(val) for val in row[1].split(":") )
data.append(datetime.time(H, M, S, ms))
# Eingangsport und Ausgangsport, Eingangsnummer und Ausgangsnummer
data += [int(row[2]), int(row[3]), row[4] or None, row[5] or None]
# Dauer
try:
data.append(int(row[6]))
except ValueError:
data.append(None)
# Fehler
data.append(row[7].strip())
#
# Daten in DB schreiben
#
sql = """
INSERT INTO call (
datum,
uhrzeit,
eingangsport,
ausgangsport,
eingangsnummer,
ausgangsnummer,
dauer,
fehler
) VALUES (
%s, %s, %s, %s, %s, %s, %s, %s
)
"""
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()
lg
Gerold
