Seite 1 von 2
SQL Lite
Verfasst: Donnerstag 8. Januar 2015, 14:55
von Padidem
Könnte mir jemand bei ein paar Aufgaben zu SQL-Lite helfen?
Vielen Dank
Gruß Patrick
Re: SQL Lite
Verfasst: Donnerstag 8. Januar 2015, 14:57
von Sirius3
@Padidem: Dazu solltest Du wohl eine konkrete Frage stellen. Sonst bist Du hier im falschen Unterforum (einen Bereich "Metafragen" gibt es hier aber gar nicht, vielleicht "Offtopic")
Re: SQL Lite
Verfasst: Donnerstag 8. Januar 2015, 15:07
von Padidem
wie finde ich in einer Datenbank die Namen der Tabellen und die Namen der Spalten inklusive deren Datentypen heraus?

Re: SQL Lite
Verfasst: Donnerstag 8. Januar 2015, 15:12
von BlackJack
@Padidem: Das ist in der SQLite-Dokumentation eine FAQ:
https://sqlite.org/faq.html#q7
Re: SQL Lite
Verfasst: Donnerstag 8. Januar 2015, 15:20
von Padidem
also müssste ich einfach .tables als Befehl eingeben?
Re: SQL Lite
Verfasst: Donnerstag 8. Januar 2015, 15:27
von Sirius3
@Padidem: oder auch den zweiten Abschnitt lesen.
Re: SQL Lite
Verfasst: Donnerstag 8. Januar 2015, 15:29
von /me
Padidem hat geschrieben:also müssste ich einfach .tables als Befehl eingeben?
In der Kommandozeile schon.
Re: SQL Lite
Verfasst: Donnerstag 8. Januar 2015, 15:32
von Padidem
danke erst einmal ich werde es dann versuchen...bin eben kein Profi

Re: SQL Lite
Verfasst: Donnerstag 8. Januar 2015, 15:56
von BlackJack
Wobei diese Tabelle die Spaltennamen und Typen nur in Form eines ``CREATE …``-SQL-Ausrucks enthält, man sich das da also heraus parsen müsste.
Re: SQL Lite
Verfasst: Freitag 9. Januar 2015, 10:25
von Padidem
Hallo!
also ich komme irgendwie nicht weiter. Ich arbeite ja mit IPython Spyder und habe folgende Codes ausgeführt:
> import sqlite3
> c = sqlite3.connect('laender.db')
> cursor = c.cursor()
wenn ich nun den nachfogenden Code ausführe:
> c.execute('''SELECT * FROM sqlite_master WHERE type == "table"''').fetchall()
bekomme ich eine leere Liste [] ausgegeben.
Re: SQL Lite
Verfasst: Freitag 9. Januar 2015, 11:23
von Padidem
hier die konkrete Aufgabenstellung:
Stellen Sie eine Verbindung zur Datenbank (laender.db) her. Produzieren sie jeweils eine Liste mit den
Namen der Tabellen und den Namen der Spalten in den Tabellen, inklusive deren Datentypen. Erklären
sie kurz die Datentypen und deren Äquivalente in Python. Hinweis: In der SQLite Mastertabelle finden
sie die entsprechenden Daten
Re: SQL Lite
Verfasst: Freitag 9. Januar 2015, 12:50
von noisefloor
Hallo,
das die Liste leer ist, ist für deinen Code korrekt - du führst das execute als Methode der connection aus, und nicht des cursors... Letzteres sollte dann ein Ergebnis produzieren
Gruß, noisefloor
Re: SQL Lite
Verfasst: Freitag 9. Januar 2015, 13:12
von Sirius3
@Padidem: wie viele Tabellen sind denn in Deiner Datenbank?
Re: SQL Lite
Verfasst: Freitag 9. Januar 2015, 13:18
von Padidem
zwei Tabellen: laender_info und migrationshintergrund 2013
Re: SQL Lite
Verfasst: Freitag 9. Januar 2015, 13:22
von Padidem
@noisefloor : sorry habe mich vertippt ...ich habe den execute-Befehl als cursor.execute durchgeführt und dennoch eine leere Liste erhalten :/
Re: SQL Lite
Verfasst: Freitag 9. Januar 2015, 14:24
von BlackJack
@Padidem: Erst einmal hast Du wahrscheinlich Glück das SQLite so grosszügig mit SQL umgeht, denn der Vergleichsoperator in SQL ist eigentlich nicht ``==``.
Wenn Du bei der Abfrage keine Ergebnisse bekommst, dann sind in der Datenbank schlicht keine Tabellen enthalten. Also in *der* Datenbank. Wahrscheinlich liegt die Datenbank nicht im Arbeitsverzeichnis und Du hast mit dem `connect()`-Aufruf eine neue ``laender.db`` erstellt, die natürlich leer ist.
Re: SQL Lite
Verfasst: Freitag 9. Januar 2015, 14:37
von Padidem
danke für den Tip

allerdings habe ich die datei laender.db entpackt und dann direkt auf C:\\ gezogen.
Re: SQL Lite
Verfasst: Freitag 9. Januar 2015, 14:49
von BlackJack
Tja und das Arbeitsverzeichnis von Deinem Programm oder der interaktiven Sitzung wird dann sehr wahrscheinlich nicht direkt das Wurzelverzeichnis des Laufwerks C: sein. Das wäre auch irgendwie komisch.
Re: SQL Lite
Verfasst: Freitag 9. Januar 2015, 15:15
von Padidem
super ... vielen Dank...habe es jetzt endlich hinbekommen und habe folgenden Output:
[(u'table',
u'laender_info',
u'laender_info',
2,
u'CREATE TABLE laender_info (\n [index] INTEGER,\n [land] TEXT,\n [kuerzel] TEXT,\n [hauptstadt] TEXT,\n [beitrittsdatum] INTEGER,\n [regierungschef] TEXT,\n [regierungspartei] TEXT,\n [stimmgewicht] INTEGER,\n [flaeche] INTEGER,\n [einwohner_mio] REAL,\n [einwohner_km2] INTEGER,\n [auslaender] REAL,\n [sprachen] TEXT\n )'),
(u'table',
u'migrationshintergrund_2013',
u'migrationshintergrund_2013',
5,
u'CREATE TABLE migrationshintergrund_2013 (\n [index] INTEGER,\n [land] TEXT,\n [insgesamt] INTEGER,\n [ohne_mh] INTEGER,\n [mit_mh] INTEGER\n )')]
und wie kann ich nun hieraus folgendermaßen Listen erstellen :
Nur die Namen der Tabelle sollen als Liste formatiert werden. Die Namen der Spalten und deren Datentypen sollen als eine Liste von Zweier-Tupeln formatiert sein, die an erster Stelle den Namen der Spalte und an zweiter Stelle den Datentyp beinhalten.
Re: SQL Lite
Verfasst: Freitag 9. Januar 2015, 15:31
von BlackJack
@Padidem: Als erstes würde ich die Abfrage so schreiben das nur die relevanten Daten geliefert wird und nicht immer die kompletten Datensätze. Und dann musst Du wie schon gesagt das SQL parsen mit dem die Tabellen erstellt wurden das ja in der SQLite-Master-Tabelle hinterlegt ist. Da ist die Frage ob die Lösung jetzt genau mit dieser speziellen DB funktionieren muss, oder grundsätzlich mit jeder DB. Da dort wirklich die SQL-Anweisung gespeichert ist mit der die Tabelle erstellt wurde, muss man da streng genommen alles verarbeiten können was SQLite an ``CREATE TABLE…``-Syntax akzeptiert. Das konkrete Beispiel nutzt ja nur einen sehr kleinen Bruchteil davon. Nicht einmal Primärschlüssel sind ausgezeichnet.