SQL Lite

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
BlackJack

@Hyperion: So einfach würde ich das einlesen nicht sehen, denn die Datenbanktabelle wird ja wohl hoffentlich nicht 1:1 so aussehen wie die Daten in der Datei angeordnet sind. Die Jahreszahlen sind ja keine sinnvollen Spalten. Auch wenn man es transponiert sind die ”Bundesländer” nicht wirklich sinnvoll für Spalten geeignet, sondern wären genau wie die Jahreszahlen eher Daten. Die ersten drei Zeilen nach der Kopfzeile sind redundant, die würden bei einem sinnvollen DB-Entwurf rausfliegen.

Also es ist keine Raketenwissenschaft, aber ein klein bisschen "Transformation" und verteilen auf mindestens zwei Tabellen ist im Code dann schon erforderlich.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

@BlackJack: Ich habe mir die Daten nicht wirklich genau angesehen. Der OP fragte nach dem Einfügen in *eine* Tabelle - ob das Datenmodell sinnvoll gestaltet ist, habe ich nicht hinterfragt 8)

@Padidem: Bitte benutze doch die speziellen Markups für das Einfügen von Code! Ohne diese kann man Deinen Python-Code kaum sinnvoll lesen, da die Einrückungen verloren gehen. Und ja, so in etwa meinte ich das ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

Die IMHO einzige Lösung zu der Aufgabe mit dem Auflisten von Spaltennamen und -typen die kein hässlicher Hack ist und die man einem Anfänger eventuell, ansatzweise zumuten könnte, auch wenn SQLAlchemy für absolute Programmieranfänger auch erst mal eine ziemliche Hürde sein dürfte weil die Bibliothek ja recht umfangreich ist:

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf8
from __future__ import absolute_import, division, print_function
from sqlalchemy import create_engine, MetaData


def main():
    metadata = MetaData(create_engine('sqlite:///laender.db'))
    metadata.reflect()
    for table in metadata.tables.itervalues():
        print(table.name)
        for column in table.columns:
            print('    {0.name} {0.type}'.format(column))


if __name__ == '__main__':
    main()
Ausgabe:

Code: Alles auswählen

migrationshintergrund_2013
    index INTEGER
    land TEXT
    insgesamt INTEGER
    ohne_mh INTEGER
    mit_mh INTEGER
laender_info
    index INTEGER
    land TEXT
    kuerzel TEXT
    hauptstadt TEXT
    beitrittsdatum INTEGER
    regierungschef TEXT
    regierungspartei TEXT
    stimmgewicht INTEGER
    flaeche INTEGER
    einwohner_mio REAL
    einwohner_km2 INTEGER
    auslaender REAL
    sprachen TEXT
Antworten