Datenbankanbindung Problem

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

@sparrow
was möchtest du genau sehen?
ich kann dir sagen das die Tabelle nur eine Spalte hat, nationalität varchar(50)
Keine laufende Nummer oder ähnliches.
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Ok, das was du da tust funktioniert zwar, aber ich glaube das ist Postgres-spezial.

Besser zu lesen und wahrscheinlich weniger fehleranfällig wäre es allerdings wirklich mit executemany. Wenn du mehr mit postgres machen willst, dann solltest du dort einen Blick drauf werfen.

Allerdings habe ich in der Vergangenheit bei sehr, sehr vielen Statements über executemany unter postgres festgestellt, dass das sehr langsam sein kann. Es kann sein, dass der Autor das mit den Prepared Statements nicht so abgebildet hat, dass der Server das als solche abarbeitet.
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

Ich bin sonst kein Postgres nutzer und hab es an sich auch nie verwendet aber ich muss damit arbeiten und kenne noch nicht alle Funktionen usw.
Das mit den Nationalitäten hab ich geschrieben und mehrfach probiert, ich hasse es einfach in der Konsole alles einzutippen und wenn da mal ein Fehler
is gehts wieder von vorne los.... war mir auf dauer zu doof.
Hab deswegen mir das kleine Skript geschrieben, Anfang des Jahres war das glaub ich und da war mir "executemany" noch kein begriff, jetzt zwar auch nicht
aber ich schau es mir genauer an.
Benutzeravatar
sparrow
User
Beiträge: 4193
Registriert: Freitag 17. April 2009, 10:28

Hier ist die Dokumentation. Damit hast du die Möglichkeit ein Statement zu übergeben und eine Liste der entsprechenden Parameter.

Du machst also ein Insert-Statement mit Platzhalter und als zweiten Parameter eine Liste von Tupeln, die die Platzhalter auffüllen.
Zuletzt geändert von sparrow am Donnerstag 3. September 2015, 10:46, insgesamt 1-mal geändert.
BlackJack

@Kalli87: Wie verwendet man eine Tabelle mit Zeichenketten ohne das die eine Spalte mit IDs hat?
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

Danke sparrow :)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

BlackJack hat geschrieben:@Kalli87: Wie verwendet man eine Tabelle mit Zeichenketten ohne das die eine Spalte mit IDs hat?
Irgend wie gar nicht (sinnvoll) :mrgreen:

Aber wir wissen doch gar nicht, dass die keine ID haben? Kann ja eine automatisch generierte sein!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

@Hyperion: Doch, wissen wir:
Kalli87 hat geschrieben:ich kann dir sagen das die Tabelle nur eine Spalte hat, nationalität varchar(50)
Keine laufende Nummer oder ähnliches.
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

Die Tabelle braucht ja keine ID, finde ich persönlich total überflüssig eine Spalte mit einer Nummer einzusetzen.
Wenn ich eine hätte wäre es eh "autoincrement" :D
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Ah... ok! Tja... dann ist das wirklich obskur :D
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

@Hyperion
Was is jetzt eigentlich obskur?
Steh gerade aufm schlauch, sorry :D
BlackJack

@Kalli87: Eine Tabelle ohne eine ID-Spalte beziehungsweise ein VARCHAR(50) als Primärschlüssel ist obskur.

Edit: Und das dann auch noch als einige Spalte der Tabelle. Wie setzt man das mit anderen Tabellen in Beziehung?
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

Eigentlich dient die Tabelle nur um die Nationalitäten auszulesen und in ein dropdown menü zu packen.
Und das Dropdownmenü hängt in einem Formular was zum Kunden anlegen gedacht is.
Kundentabelle is extra und dort landet dann auch die nationalität.
BlackJack

@Kalli87: Was meinst Du mit in der Kundentabelle landet die Nationalität? Etwa auch als VARCHAR(50)? Genau das wäre ja falsch, denn dort sollte die *ID* von der Nationalität landen und nicht kopierte und damit redundante Daten. Das verletzt die Normalform des Schemas.

Zur Initialisierung von Datenbanken verwendet man normalerweise SQL das in *Dateien* steht und nicht live in die Konsole bei einem textbasierten Datenbankclient getippt wird. Das kann man dann bei solchen Clients entweder in den Client pipen oder den Dateinamen als Argument oder Option beim Aufruf angeben. Das wäre dann auch unabhängig von der Programmiersprache die man am Ende verwendet um die Datein aus der Datenbank zu verarbeiten.
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

Ja ok Blackjack, hast ja vollkommen recht was die Normalform der Datenbank betrifft.

Kennt einer eine vernünftige Oberfläche zum verwalten der Postgres-Datenbank?
Über die Konsole bekomm ich irgendwann die Krise.
BlackJack

@Kalli87: Als GUI-Programm habe ich schon pgadmin3 verwendet. Und als Weboberfläche Adminer.
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

Das Problem ist bei das ich zwar Pgadmin3 starten kann aber mich nicht zur Postgresdatenbank verbinden kann.
Und wenn ich hier im Praktikum nach Hilfe frage was das betrifft, wird sofort nein gesagt.
BlackJack

@Kalli87: Nun das Thema hatten wir ja schon: PostgreSQL ist da in der Grundeinstellung ziemlich sicher konfiguriert was das Anmelden betrifft. Man muss da schon ziemlich genau konfigurieren welche Nutzer wie und von wo darauf zugreifen können. *Das* sollte man dann aber auch drauf haben wenn man mit PostgreSQL arbeitet.
Antworten