Seite 1 von 1

PRAGMA Funktion

Verfasst: Montag 12. Januar 2015, 12:36
von Padidem
habe mit der Funktion:

Code: Alles auswählen

cursor.execute('''PRAGMA table_info(laender_info)''').fetchall()

Code: Alles auswählen

[(0, u'index', u'INTEGER', 0, None, 0),
 (1, u'land', u'TEXT', 0, None, 0),
 (2, u'kuerzel', u'TEXT', 0, None, 0),
 (3, u'hauptstadt', u'TEXT', 0, None, 0),
 (4, u'beitrittsdatum', u'INTEGER', 0, None, 0),
 (5, u'regierungschef', u'TEXT', 0, None, 0),
 (6, u'regierungspartei', u'TEXT', 0, None, 0),
 (7, u'stimmgewicht', u'INTEGER', 0, None, 0),
 (8, u'flaeche', u'INTEGER', 0, None, 0),
 (9, u'einwohner_mio', u'REAL', 0, None, 0),
 (10, u'einwohner_km2', u'INTEGER', 0, None, 0),
 (11, u'auslaender', u'REAL', 0, None, 0),
 (12, u'sprachen', u'TEXT', 0, None, 0)]
wie kann ich hieraus nun eine Liste zweier Tupel entwickeln, in der an der ersten Stelle des Tupels der Spaltenname und an der zweiten Stelle der Datentyp steht. Also im Prinzip genau die Liste wie im Output nur ohne die Zahlenwerte und 'None'.

Re: PRAGMA Funktion

Verfasst: Montag 12. Januar 2015, 13:04
von Hyperion
Das sind wieder absolute Basics! Du musst doch nur die gegebene Liste durchlaufen und eine *neue* erstellen, die nur noch genau die Datenbeinhaltet, die Du brauchst.

Man kann das sogar als List-Comprehension oder bei Bedarf auch als Generator-Funktion aufbauen. Das sind aber beides Themen, die man als Anfänger nicht unbedingt drauf haben muss. Den kanonischen ersten Ansatz aber auf jeden Fall ;-)

Merk Dir das Vorgehen auf jeden Fall. Denn so etwas kommt oft vor!

Edit: Der Thread-Titel passt imho gar nicht gut zum Inhalt! ;-)

Re: PRAGMA Funktion

Verfasst: Montag 12. Januar 2015, 13:12
von noisefloor
Hallo,

wollte gerade das gleiche schreiben, wie Hyperion. Kann ich mir ja dann sparen.

Ich würd's per List Comprehension machen. Ist pythonisch und elegant ;-)

Gruß, noisefloor

Re: PRAGMA Funktion

Verfasst: Montag 12. Januar 2015, 13:14
von Padidem
und wie schreibe ich dann die List-Comprehension Bedingung ?? :K

Re: PRAGMA Funktion

Verfasst: Montag 12. Januar 2015, 13:19
von noisefloor
Hallo,

indem du die Doku zu List Comprehensions liest :D -> https://docs.python.org/2/tutorial/data ... rehensions

Du kannst auch einfach in einer for-Schleife über die Liste iterieren und dir dabei eine neue Liste gem. deinen Vorgaben bauen. Gleiches Ergebnis wie List Comprehension, nur wengier elegant. Was ja erst mal egal ist, wenn "nur" das Ergebnis zählt ;-)

Gruß, noisefloor

Re: PRAGMA Funktion

Verfasst: Montag 12. Januar 2015, 13:25
von Padidem
wie man List Comprehensions schreibt weiß ich...aber wie schreibe ich die Bedingung dass ich nur den Spaltennamen und den Datentyp ausgegeben haben möchte?

Re: PRAGMA Funktion

Verfasst: Montag 12. Januar 2015, 13:29
von noisefloor
Hallo,

indem du nur die Elemente mit dem gewünschten Index in die neue Liste übernimmst. Genau so, wie du es in einer for-Schleife auch machen würdest.

Gruß, noisefloor

Re: PRAGMA Funktion

Verfasst: Montag 12. Januar 2015, 13:30
von pillmuncher
Es sind wirklich absolute Basics. Geh und lies das Tutorial nochmal. Dann wirst du verstehen, was hier passiert:

Code: Alles auswählen

>>> t = ('a', 'b', 'c', 'd')
>>> t
('a', 'b', 'c', 'd')
>>> t[1]
'b'
>>> t[2]
'c'
>>> t[2:]
('c', 'd')
>>> t[:2]
('a', 'b')
>>> t[1:3]
('b', 'c')

Re: PRAGMA Funktion

Verfasst: Montag 12. Januar 2015, 14:52
von Padidem
so habe es jetzt :)

Code: Alles auswählen

tab_info  = [(i[1],i[2]) for i in cursor.execute('''PRAGMA table_info(laender_info)''').fetchall()]

Re: PRAGMA Funktion

Verfasst: Montag 12. Januar 2015, 14:54
von pillmuncher
@Padidem: Mein Beispiel in den Zeilen 12 und 13 hast du nicht wirklich gelesen, oder?

Re: PRAGMA Funktion

Verfasst: Montag 12. Januar 2015, 15:00
von BlackJack
Funktioniert das überhaupt so? Der Rückgabewert von `Cursor.execute()` hat eine `fetchall()`-Methode? Das steht nicht in der `sqlite3`-Dokumentation und in der DB 2.0 API steht zu der Methode wörtlich: „Return values are not defined.”.

Re: PRAGMA Funktion

Verfasst: Montag 12. Januar 2015, 15:04
von Padidem
funktioniert einwandfrei :lol:

Re: PRAGMA Funktion

Verfasst: Montag 12. Januar 2015, 15:24
von Sirius3
@Padidem: wenn etwas funktioniert, heißt das noch nicht, dass man es auch benutzen sollte, vor allem, wenn es nirgends dokumentiert ist und es einen Standard erweitert, und es DB2.0-Implementierungen gibt, die das nicht unterstützen.

Re: PRAGMA Funktion

Verfasst: Montag 12. Januar 2015, 17:48
von BlackJack
Zudem ist es ja nicht einmal für das `sqlite3`-Modul dokumentiert, also kann man auch nicht davon ausgehen dass das eine Erweiterung ist die öffentlich sein soll und damit auch mit jeder Version funktioniert.