table info

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

Gibt es eine Möglichkeit sich die "table werte" anzeigen zu lassen?
Also quasi von einem table personen
name vorname id ....
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Tengel hat geschrieben:Gibt es eine Möglichkeit sich die "table werte" anzeigen zu lassen?
Ich nehme an du meinst die Spaltennamen. Von welchem Datenbankmanagementsystem reden wir denn?
BlackJack

Falls Spaltennamen gemeint sind und wir von einer SQL-Datenbank mit einem DB API 2.0 kompatiblen Modul reden, dann gibt es ein `description`-Attribut auf dem Cursor-Objekt: http://www.python.org/dev/peps/pep-0249/#description
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

Sry - ganz verpennt anzugeben welche Datenbank...

Ja ich nutze sqlite3
Kannst du mir bitte ein Beispiel zu cursor.description() geben?
Sirius3
User
Beiträge: 17746
Registriert: Sonntag 21. Oktober 2012, 17:20

»description« ist keine Funktion sonder ein Attribut.

Code: Alles auswählen

…
for description in cursor.description:
    print description.name
…
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

Code: Alles auswählen

import sqlite3

connection = sqlite3.connect("hallo.db")
cursor = connection.cursor()
cursor.execute("SELECT * FROM personen")

for description in cursor.description:
    print(description)

connection.close()

So läuft es gibt aber

Code: Alles auswählen

('name', None, None, None, None, None, None)
('vorname', None, None, None, None, None, None)
('personalnummer', None, None, None, None, None, None)
('gehalt', None, None, None, None, None, None)
aus.
In der Dokumentation steht das name und type_code vorgeschrieben sind, müsste das erste None da nicht den Typ angeben?

Auch wird bei
print(description.name) ein Fehler zurück gegeben das der Tupel kein Attribut name hat - liegt das an meiner Version?
Ah - ist unnötig da sich Tupel ja mit description[0] - abfragen lassen.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Tengel hat geschrieben:In der Dokumentation steht das name und type_code vorgeschrieben sind, müsste das erste None da nicht den Typ angeben?
SQLite ist ein wenig lax bezüglich Typdefinitionen für Spalten. Das sind eher Empfehlungen als echte Festlegungen.

Aus http://www.sqlite.org/datatype3.html: "With static typing, the datatype of a value is determined by its container - the particular column in which the value is stored. SQLite uses a more general dynamic type system. In SQLite, the datatype of a value is associated with the value itself, not with its container.".

Für mich ist SQLite eigentlich keine echte SQL-Datenbank sondern nur ein besserer Zettelkasten. Allerdings ist es ein sehr einfach einsetzbarer und schneller Zettelkasten. :D
Tengel
User
Beiträge: 210
Registriert: Sonntag 17. März 2013, 12:29

Gibt es eine Möglichkeit abzufragen welche Tabellen in einer Datenbank vorhanden sind?
BlackJack

@Tengel: In der Regel ja, aber wie das genau geht ist von Datenbanksystem zu Datenbanksystem unterschiedlich. Einige haben spezielle nicht standardisierte SQL-Anweisungen dafür, andere legen die Informationen in Tabellen ab, deren Namen man wissen muss um nachschauen zu können welche Tabellen es gibt.
Antworten