Ändern von Bezeichnungen in einer Liste
Normalerweise ja, aber wir sehen das hier nicht ganz so eng. Solange das hier kein Sammelthread für deine Fragen der nächsten 12 Monate wird, denke ich, dass es in Ordnung geht, wenn du die Frage hier im Thread stellst.
-
- User
- Beiträge: 29
- Registriert: Montag 7. März 2016, 16:27
@snafu: ok, dann frage ich mal nach
Hier der Teil für den Insert erweitert um die Eingrenzung
erhalte ich immer Invalid Syntax und die Markierung steht auf dem letzten " vor
,(osp_tenants_tenant_id))
conn.commit()
Mein Ziel ist es, die Werte die in der Datenbank sind nicht nochmal einzufügen
ich hab schon so viel verschiedenes in Internet gelesen, aber einen besseren Ansatz habe ich noch nicht gefunden
Hier der Teil für den Insert erweitert um die Eingrenzung
Code: Alles auswählen
for item in t['tenants']:
osp_tenants_tenant_id = item['id']
osp_tenants_name = item['name']
osp_tenants_description = item['description']
print(osp_tenants_tenant_id)
print(osp_tenants_name)
print(osp_tenants_description)
cur.execute("""INSERT INTO osp_tenants (name, tenant_id, description) VALUES (%s, %s, %s)""",(osp_tenants_name, osp_tenants_tenant_id, osp_tenants_description)\
"""(if not exists (select tenant_id from osp_tenants where tenant_id = %s)""",(osp_tenants_tenant_id))
conn.commit()
,(osp_tenants_tenant_id))
conn.commit()
Mein Ziel ist es, die Werte die in der Datenbank sind nicht nochmal einzufügen
ich hab schon so viel verschiedenes in Internet gelesen, aber einen besseren Ansatz habe ich noch nicht gefunden
Zuletzt geändert von Anonymous am Montag 21. März 2016, 17:32, insgesamt 1-mal geändert.
Grund: Quelltext in Code-Tags gesetzt.
Grund: Quelltext in Code-Tags gesetzt.
@andyritter: Das ist halt kein gültiges Python. Und AFAIK wird das auch in SQL so nicht möglich sein mit einem bedingten Einfügen.
Entweder fragt man vorher die ID ab, oder man deklariert die als UNIQUE (falls das nicht sowieso schon der Primärschlüssel ist) und behandelt die auftretende Ausnahme entsprechend.
Entweder fragt man vorher die ID ab, oder man deklariert die als UNIQUE (falls das nicht sowieso schon der Primärschlüssel ist) und behandelt die auftretende Ausnahme entsprechend.
- miracle173
- User
- Beiträge: 127
- Registriert: Samstag 6. Februar 2016, 00:28
@snafu: Wenn normalerweise ja, warum jetzt nicht? Es ist eigentlich nicht sinnvoll, eine andere Frage hier zu posten. Es passt nicht zum Thread-Titel, ist als Frage nicht zu finden und wenn jemand nocht etwas zur ursprünglichen Frage posten will, ergibt das dann ein völliges Durcheinander von Antworten. Einen Vorteil kann ich eigentlich keinen erkennen.
mfg miracle173
https://github.com/python-forum-de/Jump-N-Run-pydesw
https://github.com/python-forum-de/Jump-N-Run-pydesw
@miracle173
Prinzipiell hast du Recht. Ich stimme deiner Begründung völlig zu.
Es ist aber jetzt auch kein Beinbruch für mich. Und ich weiß, dass auch in anderen Threads schon Folgefragen gestellt wurden, die zwar auf dem ursprünglichen Thema aufgebaut haben, aber streng genommen hätte man sie isoliert in einem eigenen Thread stellen müssen.
Wenn es dir ein wichtiges Anliegen ist, die beiden Themen zu trennen, dann wende dich am besten direkt an die Moderatoren (z.B an BlackJack), damit der Thread nachträglich gesplittet wird.
Wie gesagt: Mir ist es ehrlich gesagt egal, wenn man ausnahmsweise den selben Thread für eine Folgefrage nutzt. Es sollte nur nicht zur Regelmäßigkeit werden.
Prinzipiell hast du Recht. Ich stimme deiner Begründung völlig zu.
Es ist aber jetzt auch kein Beinbruch für mich. Und ich weiß, dass auch in anderen Threads schon Folgefragen gestellt wurden, die zwar auf dem ursprünglichen Thema aufgebaut haben, aber streng genommen hätte man sie isoliert in einem eigenen Thread stellen müssen.
Wenn es dir ein wichtiges Anliegen ist, die beiden Themen zu trennen, dann wende dich am besten direkt an die Moderatoren (z.B an BlackJack), damit der Thread nachträglich gesplittet wird.
Wie gesagt: Mir ist es ehrlich gesagt egal, wenn man ausnahmsweise den selben Thread für eine Folgefrage nutzt. Es sollte nur nicht zur Regelmäßigkeit werden.
-
- User
- Beiträge: 29
- Registriert: Montag 7. März 2016, 16:27
@BlackJack: Ich habe die Spalte als UNIQUE deklariert. Danke für den Hinweis.
Ich habe den Insert wie folgt gelöst:
Weitere Fragen werde ich in einem Neuen Thread stellen
Danke an alle für Eure Unterstützung.
Ich habe den Insert wie folgt gelöst:
Code: Alles auswählen
# Einfügen der Werte aus der Tenant Abfrage
for item in t['tenants']:
osp_tenants_tenant_id = item['id']
osp_tenants_name = item['name']
osp_tenants_description = item['description']
#print(osp_tenants_tenant_id ,osp_tenants_name, osp_tenants_description)
try:
cur.execute("""INSERT INTO osp_tenants (name, tenant_id, description) VALUES (%s, %s, %s)""", (osp_tenants_name, osp_tenants_tenant_id, osp_tenants_description))
print("Neuer Eintrag:", osp_tenants_name, osp_tenants_tenant_id, osp_tenants_description)
except:
print(osp_tenants_tenant_id,"schon vorhanden")
print("-------------------------------------------------------")
Danke an alle für Eure Unterstützung.
Zuletzt geändert von Anonymous am Dienstag 22. März 2016, 11:55, insgesamt 1-mal geändert.
Grund: Quelltext in Code-Tags gesetzt.
Grund: Quelltext in Code-Tags gesetzt.
@andyritter: Nackte ``except:``\s sind keine gute Idee. Du behandelst hier *jede* Ausnahme so als wäre die ID schon vorhanden, auch wenn die Ausnahme einen ganz anderen Grund hat. Zum Beispiel ein Programmierfehler, oder ein Netzwerkproblem, oder das die Datenbank nicht (mehr) erreichbar ist, oder…
-
- User
- Beiträge: 29
- Registriert: Montag 7. März 2016, 16:27
@BlackJack: Wie kann ich denn einen IOError ausklammern, dass das Script weiter ausgeführt wird? Wenn ich den IOError mit aufführe,BlackJack hat geschrieben:@andyritter: Nackte ``except:``\s sind keine gute Idee. Du behandelst hier *jede* Ausnahme so als wäre die ID schon vorhanden, auch wenn die Ausnahme einen ganz anderen Grund hat. Zum Beispiel ein Programmierfehler, oder ein Netzwerkproblem, oder das die Datenbank nicht (mehr) erreichbar ist, oder…
Code: Alles auswählen
for item in t['tenants']:
osp_tenants_tenant_id = item['id']
osp_tenants_name = item['name']
osp_tenants_description = item['description']
#print(osp_tenants_tenant_id ,osp_tenants_name, osp_tenants_description)
try:
cur.execute("""INSERT INTO osp_tenants (name, tenant_id, description) VALUES (%s, %s, %s)""", (osp_tenants_name, osp_tenants_tenant_id, osp_tenants_description))
print("Neuer Eintrag:", osp_tenants_name, osp_tenants_tenant_id, osp_tenants_description)
except IOError as e:
print(osp_tenants_tenant_id,"schon vorhanden")
print("-------------------------------------------------------")
else:
print("alles ok")
erscheint diese Fehlermeldung:
Traceback (most recent call last):
File "/home/akquinet/Dokumente/Database_insert_tenants.py", line 76, in <module>
cur.execute("""INSERT INTO osp_tenants (name, tenant_id, description) VALUES (%s, %s, %s)""", (osp_tenants_name, osp_tenants_tenant_id, osp_tenants_description))
IntegrityError: duplicate key value violates unique constraint "osp_tenants_tenant_id_key"
DETAIL: Key (tenant_id)=(abcd) already exists.
Bei allen Möglichkeiten,die ich bei Google gefunden habe wird diese Fehlerbehandlung nicht dargestellt oder ich verstehe es nicht.
Zuletzt geändert von Anonymous am Donnerstag 24. März 2016, 09:59, insgesamt 1-mal geändert.
Grund: Quelltext in Code-Tags gesetzt.
Grund: Quelltext in Code-Tags gesetzt.
@andyritter: Du behandelst einen `IOError` (warum?), und bekommst bei einer bereits vorhandenen `tenant_id` einen `IntegrityError`. Finde den Fehler.
-
- User
- Beiträge: 29
- Registriert: Montag 7. März 2016, 16:27
@BlackJAck: Wenn ich den IntegrityError abfangen will mit:
Erhalte ich diese Fehlermeldung:
Traceback (most recent call last):
File "/home/akquinet/Dokumente/Database_insert_tenants.py", line 78, in <module>
except IntegrityError as e:
NameError: name 'IntegrityError' is not defined
Wobei mich dann wiederum stutzig macht, dass die Fehlerbezeichnung nicht definiert sein soll.
Code: Alles auswählen
for item in t['tenants']:
osp_tenants_tenant_id = item['id']
osp_tenants_name = item['name']
osp_tenants_description = item['description']
#print(osp_tenants_tenant_id ,osp_tenants_name, osp_tenants_description)
try:
cur.execute("""INSERT INTO osp_tenants (name, tenant_id, description) VALUES (%s, %s, %s)""", (osp_tenants_name, osp_tenants_tenant_id, osp_tenants_description))
print("Neuer Eintrag:", osp_tenants_name, osp_tenants_tenant_id, osp_tenants_description)
except IntegrityError as e:
print(osp_tenants_tenant_id,"schon vorhanden")
print("-------------------------------------------------------")
else:
print("alles ok")
Traceback (most recent call last):
File "/home/akquinet/Dokumente/Database_insert_tenants.py", line 78, in <module>
except IntegrityError as e:
NameError: name 'IntegrityError' is not defined
Wobei mich dann wiederum stutzig macht, dass die Fehlerbezeichnung nicht definiert sein soll.
Zuletzt geändert von Anonymous am Donnerstag 24. März 2016, 10:23, insgesamt 1-mal geändert.
Grund: Quelltext in Code-Tags gesetzt.
Grund: Quelltext in Code-Tags gesetzt.
- miracle173
- User
- Beiträge: 127
- Registriert: Samstag 6. Februar 2016, 00:28
Code: Alles auswählen
Traceback (most recent call last):
File "/home/akquinet/Dokumente/Database_insert_tenants.py", line 76, in <module>
cur.execute("""INSERT INTO osp_tenants (name, tenant_id, description) VALUES (%s, %s, %s)""", (osp_tenants_name, osp_tenants_tenant_id, osp_tenants_description))
IntegrityError: duplicate key value violates unique constraint "osp_tenants_tenant_id_key"
DETAIL: Key (tenant_id)=(abcd) already exists.
in etwa
Beim Ausführen von
cur.execute("""INSERT INTO osp_tenants (name, tenant_id, description) VALUES (%s, %s, %s)""", (osp_tenants_name, osp_tenants_tenant_id, osp_tenants_description))
Anmerkung von mir: das ist das Einfügen eines Datensatzes in die Datenbank
in der Zeile 76 der Datei "Database_insert_tenants.py" gabs den
Integritäts-Fehler: doppelter Schlüsselwert verletzt die Eindeutigkeitsbeschränkung "osp_tenants_tenant_id_key"
Detail: Den Schlüssel (tenant_id)=(abcd) gibt es schon.
Was ist dir daran nicht klar?
mfg miracle173
https://github.com/python-forum-de/Jump-N-Run-pydesw
https://github.com/python-forum-de/Jump-N-Run-pydesw
@andyritter: Das ist eine Ausnahme die spezifisch für Datenbanken ist, natürlich fällt das nicht einfach so vom Himmel und ist auf magische Weise verfügbar. Du musst die Ausnahme schon aus dem Modul importieren in dem sie definiert wurde, wie alle anderen Datentypen ausser den eingebauten halt auch.
-
- User
- Beiträge: 29
- Registriert: Montag 7. März 2016, 16:27
@miracle: Mir ist nicht klar, wie ich es fertig bringe, dass das Script weiterläuft, auch wenn für einen Datensatz ein "IntegrityError: duplicate key value violates unique constraint" geworfen wird.
@BlackJack: Leider habe ich keine Ahnung, in welchem Modul dieser Fehler definiert sein soll. Kannst Du mir da einen Tipp geben?
Danke schön
@BlackJack: Leider habe ich keine Ahnung, in welchem Modul dieser Fehler definiert sein soll. Kannst Du mir da einen Tipp geben?
Danke schön
@andyritter: Nee, kann ich nicht. Ich bin gerade zu sehr mit kopfschütteln beschäftigt. In welchem Modul mag wohl der Ausnahmetyp für Datenbankfehler definiert sein… Wie soll man da bloss drauf kommen…
-
- User
- Beiträge: 29
- Registriert: Montag 7. März 2016, 16:27
except psycopg2.IntegrityError: