__blackjack__ hat geschrieben: ↑Samstag 20. Mai 2023, 23:40
@Kalysto: Ad 1.: Tabellennamen benenne ich in der Einzahl, denn das ist ja eine Entität oder Relation und die beschreibt genau wie die Klasse *einen* Datensatz.
war das hierauf bezogen: "`tabelle_id` würde ich nur `id` nennen." ?
werde ich anpassen, danke
__blackjack__ hat geschrieben: ↑Samstag 20. Mai 2023, 23:40
Ich würde im Code alles Englisch benennen, sonst endet das in einem Denglisch-Mix mit der Programmiersprache und anderen Namen. Momentan ist es ja schon so, dass die Tabelle `customers` heisst, die Spalten dieser Tabelle dann aber deutsch benannt sind.
Ja, hmmm das hatte ich zuvor auch gemacht nur ist es dann so das ich teilweise nicht mehr weis was es bedeutet hatte, da mein Englisch nicht gerade das beste ist habe ich dann eben Übersetzter genutzt das dann aber Wiederrum vergessen....
wenn ich nun hergehen würde und würde meine Tabelle `customers` in `Kunden` anpassen wäre das dann okay oder sollte man das alles in Englisch halten wie auch Variablen etc. ?
__blackjack__ hat geschrieben: ↑Samstag 20. Mai 2023, 23:40
Bei `firma` dachte ich erst an eine ID und dass das ein Fremdschlüssel sein müsste, aber ich denke eher Du willst da `Boolean` statt `Integer` haben‽ Und dann sollte das eher `ist_firma` oder `is_company` heissen. Wobei ich mich Frage ob man das überhaupt braucht, denn nur Firmen haben einen Firmennamen, also könnte man das doch auch daran koppeln, ob der Firmenname nicht None/NULL ist. `is_company` könnte man als Property definieren. Eventuell auch als Hybrid-Property das auch als Abfragetest in Datenbankabfragen verwendet werden kann. Und `favorit` ist wohl auch ein `Boolean` mit dem Default-Wert `False`.
Insgesamt sollte man da mal schauen was alles nicht `nullable` sein sollte. Im Grunde ja eigentlich erst einmal alles, ausser man hat einen guten Grund das zu erlauben.
Ja, `firma` Speichert Boolean
Ja, man kann auch hergehen und den `firmenname` auf None/NULL Prüfen ich dachte mir nur das es mit einer direkten abfrage ersichtlicher scheint oder sollte man das nicht machen ?
mit dem Property und Hybrid-Property kann ich so nichts anfangen habe in MariaDB einmal geschaut dort gibt es eine solche Einstellung nicht ?
`favorit` wird bei einem neuen Kunden immer ersteinmal auf False gesetzt, richtig.
Habe ich eig. denn `nullable` ist eig. nur `benutzername_update` und `aktualisierungsdatum` da dies ja bei der Erstellung keine Rolle erst einmal spielt.
__blackjack__ hat geschrieben: ↑Samstag 20. Mai 2023, 23:40
`ort` und `postleitzahl` gehören da nicht rein, das kann ja für mehr als einen Kunden gleich sein.
Das Erstellungsdatum sollte keine Zeichenkette als Defaultwert haben, und auch eher keinen festen Wert der *einmal* beim starten des Programms festgelegt wird. Der Wert sollte immer aktuell sein, also etwas aufrufbares, dass das den aktuellen Zeitstempel erzeugt. Und das Datum der letzten Aktualisierung würde ich auf den gleichen Wert setzen. Da None/NULL zu setzen schafft nur unnötig Sonderfälle.
Wieso gehört das da nicht rein ?
Ich erstelle ja hier keine `SELECT` abfrage damit sondern ein `INSERT INTO` eig. müsste ich meine Klasse so benennen: `Kunden_Eintragung` und dann stimmt das doch ?
Wieso darf Erstellungsdatum keine Zeichenkette als Defaultwert besitzen ? Jedesmal wenn ich doch die Funktion aufrufe um einen Kunden in meine DB einzutragen wird der Wert doch neu gesetzt ?
Was genau meinst du damit: "Da None/NULL zu setzen schafft nur unnötig Sonderfälle." Ich würde `aktualisierungsdatum` erst ein Date geben wenn der Kunde auch aktualisiert wurde sprich ein `UPDATE` durchgeführt wurde ?
__blackjack__ hat geschrieben: ↑Samstag 20. Mai 2023, 23:40
Was ist denn in `kundenprojekte` gespeichert? Das sieht komisch aus.
Das werde ich noch ändern müssen hier werden aktuell "Standard" Projekte eingetragen die Automatisch bei Erstellung des Kundens eingetragen werden anhand einer Tuple: Fertigmontage, Hausrenovierung - Zählerschrank, Hausrenovierung - Unterverteilung, ....
__blackjack__ hat geschrieben: ↑Samstag 20. Mai 2023, 23:40
Eine `__init__()` würde ich nicht selbst schreiben, es gibt ja bereits eine von `Base` die man nicht nur benutzen kann, sondern auch sollte. Insbesondere *muss* man die in einer eigenen `__init__()` ja aufrufen und dann fängt man an viel unnötige Schreibarbeit zu haben.
Das mit der Schreibarbeit ist mir aufgefallen
__blackjack__ hat geschrieben: ↑Samstag 20. Mai 2023, 23:40
Ad 2.: Die Attribute auf der Klasse sind andere als die auf jedem einzelnen Exemplar. Die auf der Klasse beschreiben die Attribute die durch die `__init__()` dann später auf den einzelnen Exemplaren zur Verfügung stehen. Also die `__init__()` die bereits besteht, nicht die, die Du da noch zusätzlich geschrieben hast. Was ich wie gesagt sein lassen würde.
Okay, dann werde ich das so nicht machen.
__blackjack__ hat geschrieben: ↑Samstag 20. Mai 2023, 23:40
Ad 3.: Was soll denn da in der `__init__()` eines Kunden aus anderen Tabellen abgefragt werden? Das würde dann ja nicht auf dem Kunden als Attribut landen‽
Ich wollte eig. die PLZ und den Ort in eine Separate Tabelle schreiben und anhand ID's verknüpfen nun war eben mein Gedanke ich rufe dann mit Join etc. die ID des Orts ab sodass ich diese bei Eintragung des Kunden gleich mit in der Tabelle `customers` habe so in etwa:
Ist nun nur so daher geschrieben wie ich es gedacht habe ohne Funktion etc.:
Code: Alles auswählen
class Kunden_Eintragung(Base):
__tablename__ = "customers"
tabelle_id = Column(Integer, primary_key=True)
kundennummer = Column(Integer)
firma = Column(Integer)
favorit = Column(Integer, default=False)
benutzername = Column(String(20))
benutzername_update = Column(String(20), default=None)
firmenname = Column(String(50), default=None)
vorname = Column(String(15), default=None)
nachname = Column(String(15), default=None)
# ort = Column(String(25))
# postleitzahl = Column(Integer)
kundenprojekte = Column(String(255))
erstellungsdatum = Column(DateTime, default=f'{date.today()}')
aktualisierungsdatum = Column(DateTime, default=None)
# Nun möchte ich hier gerne Prüfen ob der Ort sowie die PLZ in der Tabelle `hab_noch_keine` bereits vorhanden ist und wenn ja mir deren ID holen bzw. wenn Nein diese Eintragen und somit dann die ID holen
If Ort in `hab_noch_keine`:
standort_id = Hier ist die dazugehörige Ort sowie PLZ ID
else:
Hier wird der Ort und die PLZ in die Tabelle `hab_noch_keine` eingetragen und danach
standort_id = Hier ist die dazugehörige Ort sowie PLZ ID
stmt = Kunden_Eintragung(
Kundennummer=1232,
Firma = False,
Benutzername = "Max Mustermann",
Vorname = "Hans",
Nachname = "Solo",
Ort = "Opfelhausen",
Postleitzahl = "55596",
Kundenprojekte = "Test 1, Test 2, Test 3, Test 4, Test 5",
)
Weis halt nicht ob man das so machen kann und darf oder auch sollte.
hier bin ich auch wieder für Hilfe offen wie man das Lösen sollte bzw. ob das überhaupt so machbar ist denn ich muss ja auf einer andere Tabelle zugreifen können und evtl. eintrage tätigen
oder muss ich zuvor eine andere Klasse/Funktion erstellen die dann erst einmal genau das Prüft und evtl. die Einträge tätigen würde und mir als return die ID liefert ?
@ __blackjack__ vielen dank für deine Mühe!