"Create Table" mit dynamischen Tabellennamen ???

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Maverik81
User
Beiträge: 7
Registriert: Samstag 11. April 2020, 20:58

Hallo,

ich möchte aus meinem Python Code heraus(Version 3.6) auf meinem MS SQL Server 2017 mehere gleiche Tabellen automatisch erstellen, welche sich lediglich im Namen der jeweils einzelnen Tabelle, voneinander unterscheiden. Ich habe es mit fix vorgebenen Namen bisher so realisiert:

cursor.execute("""CREATE TABLE test1
(var1 NCHAR(15) PRIMARY KEY,
var2 VARCHAR(20),
var3 VARCHAR(30),
var4 CHAR(10)); """)
connection.commit()

Bis hierher funktioniert alles. Tabelle wird erstellt.

Aber wie schreibe ich es so um, das der hier vergebene Tabellenname "test1" per Variable übergeben werden kann und zweits, wie prüfe ich vor Erstellung der gewünschen Tabelle, ob diese vielleicht doch schon anhand des Namens existiert??? (CREATE TABLE xyz IF NOT EXISTS)???--> damit hatte ich leider keinen Erfolg.
Hier stehe ich nun auf dem berüchtigtem Schlauch.Vielleicht kann mir jemand hierbei auf die Sprünge helfen.
Das wäre super nett und ich bedanke mich ganz groß im Vorraus.

Viele Grüße

Maverik81
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Wenn du gleiche Tabellen hast, die sich nur im Namen unterscheiden, ist das _eine_ Tabelle und das, was den Namensunterschied aus macht, gehört in ein extra Feld der Struktur.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Was ist denn der Inhalt dieser Tabellen? Kann es sein, dass Du versuchst, in den Tabellennamen Information hineinzukodieren, der eigentlich zu den Daten gehört?
Maverik81
User
Beiträge: 7
Registriert: Samstag 11. April 2020, 20:58

Hallo,

danke für Eure Rückfragen.
zu meiner Herangehensweise:

Ich habe also einen Artikel der immer der gleiche (Höhe,Breite,Tiefe,etc.) ist, nur die Farbe unterscheidet sich.(den Rest kann man erstmal dahin gestellt lassen)
Sicher kann ich die Spalte Farbe in eine "große" Tabelle einfügen und alles würde laufen, aber ich sehe das im Moment bei meinem kleinem Projekt aus der "Was ist wenn die eine große Tabelle mal Pfutsch ist, warum auch immer" Ecke. Meiner Meinung nach, wenn man die große Datenmasse statt in eine in mehrere kleine Tabellen packt, ist im Ernstfall evtl. nicht gleich alles verloren, oder sehe ich das falsch??? :?:
Nur das ich die Artikel am Ende unterscheiden kann, müsste nur die Farbe als Tabellenname dynamisch zu vergeben sein, laut Python Code (meiner Meinung nach)


Viele Grüße

Maverik81
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Dass Daten futsch sein könnten, ist wirklich kein Grund. Dafür gibt es Backups. Und bei Datenverlust ist entweder nur ein kleiner Teil einer Tabelle oder gleich mehr als eine Tabelle betroffen.
So ganz verstehe ich das Beispiel auch nicht, wenn die einzige Variable die Farbe ist, was kommt dann in die Tabelle?

Also nein, es gibt eine Tabelle mit Artikeln und ein Feld davon ist die Farbe.
Maverik81
User
Beiträge: 7
Registriert: Samstag 11. April 2020, 20:58

Hallo,

ok dann speichere ich dann doch alles in eine große Tabelle rein, aber recht wohl dabei ist mir nicht, denn mit der Zeit werden es immer mehr Datensätze, die in die eine große Tabelle landen (da könnten rein rechnerisch dann bis zu 75 Millionen Datensätze/Kalenderjahr(im schlimmsten Fall) entstehen - in einer Tabelle mit MS SQL 2017??
Naja ich werde es jetzt mal mit einer Tabelle versuchen. Falls es schief geht(Datenbank Backups sind zumindest automatisiert bereits hinterlegt), bin ich selbst der Schuldige :lol:
Aber erstmal vielen Dank für die Superschnellen Antworten.
Ich wünsche Euch einen schönen Abend.

Viele Grüße

Maverik81
bfm
User
Beiträge: 88
Registriert: Donnerstag 14. März 2013, 09:42

Da kann ich dich beruhigen. Wir haben bei uns im Rechenzentrum eine Datenbank mit 650 GB. Ich glaube ich muss morgen mal nachschauen, wie viele Millionen Datensätze da in der Lohnkontotabelle drin stehen. Interessiert mich jetzt grad :-)
Und gegen Datenverlust hilft ein Backup. Wenn man größere Operationen auf die Datenbank ausführt, macht man vorher ein Backup. Punkt!
Maverik81
User
Beiträge: 7
Registriert: Samstag 11. April 2020, 20:58

Hallo bfm,

ok danke für die Info. Das war für mich mal eine wichtige Angabe.
Dann wird es schon klappen bei mir, mit der einen großen Tabelle. :)
Also danke nochmal und einen schönen Abend

Viele Grüße

Maverik81
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

@Maverik81: Du musst dich dringend damit beschäftigen wie Relationale Datenbanken funktionieren. Und in dem Zug auch gleich verinnerlichen, was Normalisierung bei Datenbanken bedeutet.
Datenbanken sind keine Tabellenkalkulation. "Tabellen" in einer Datenbank sind keine Excel-Sheets.
Antworten