Auf Kollisionen (mit vorhandenen Identifiern) muss ich ohnehin testen.
Meine o.g. Lösung ist *etwas*... kompakter als deine. Nimm's mir bitte nicht übel, wenn ich dabei bleibe
Dein Beispiel ist dennoch hilfreich, wenn man einen bestimmten, evtl. eingeschränkten Zeichensatz benutzen möchte, danke.
Um zum Prüfen auf Kollisionen zurück zu kommen: Ich kann zwar eine Datenbank nach einem bestimmten Wert fragen und ihn, wenn dieser darin noch nicht vorhanden ist, einfügen. Allerdings ist nicht sichergestellt, dass nicht in der Zwischenzeit ein anderer Thread der Anwendung *(sehr, sehr) zufällig* auch diesen Wert erzeugt, abgefragt und eingefügt hat.
Wie lässt sich das verhindern? Ist ein `Lock`-Objekt eine gute Lösung (z.B. auch für das Erzeugen/ungestörte Einlesen/whatever von Dateien)? Würde es im Zusammenhang mit einer Datenbank evtl. zuviel Wartezeit verursachen und den Rest der Applikation ausbremsen?
Wie zufällige Hashes erzeugen?
Urgs, Transaktionen, klar, danke.
Unique benutze ich natürlich schon. Hierzu wüsste ich bei der Gelegenheit jedoch gerne mal, wie man Datenbank-Exceptions z.B. durch Contraint-Überschreitungen sauber abfangen kann. Soweit ich weiß werfen die alle einen recht allgemeinen (SQLAlchemy-)Fehler, auf den sich schlecht reagieren lässt (und die Einbeziehung der Fehlermeldungen selbst ist mir zu riskant angesichts von Versionsänderungen).
Unique benutze ich natürlich schon. Hierzu wüsste ich bei der Gelegenheit jedoch gerne mal, wie man Datenbank-Exceptions z.B. durch Contraint-Überschreitungen sauber abfangen kann. Soweit ich weiß werfen die alle einen recht allgemeinen (SQLAlchemy-)Fehler, auf den sich schlecht reagieren lässt (und die Einbeziehung der Fehlermeldungen selbst ist mir zu riskant angesichts von Versionsänderungen).