@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.
SQL Lite
- 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
@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
@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
assert encoding_kapiert
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:
Ausgabe:
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()
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