SQLite und Python. Die Werte werden fehlerfrei geschrieben, jedoch nicht in die Datenbank, sobald das Programm beendet wurde

Ich habe ein Problem mit Python und SQLite in einem Skript, mit dem Daten aus dem Internet heruntergeladen und in eine SQLite-Datenbank gestellt werden. Zu Beginn der Ausführung öffne ich die Verbindung und weise den Cursor zu. Dieser Cursor wird dann an die Methoden gesendet, die die Daten herunterladen und in die Datenbank schreiben. Soweit ich weiß, funktioniert die Methode create_schema, da die Datenbank mit der richtigen Struktur erstellt wurde, die anderen Methoden anscheinend fehlschlagen, aber im Skript ausgeführt werden, ohne Fehler auszulösen. Ich habe versucht, mit dem SQLite3-Terminal-Tool in die Datenbank zu gelangen und Werte aus den Tabellen auszuwählen, aber auch ein select * gibt ein leeres Ergebnis zurück. Ich bin mir nicht ganz sicher, wie der Cursor mit Methoden funktioniert, aber ich hoffe, dass ich durch das Posten hier ein besseres Verständnis erlangen kann. Vielen Dank im Voraus für Ihre Hilfe.

(PS: Entschuldigen Sie die Einrückungen. Ich habe keine gute Möglichkeit gefunden, Einrückungen für den gesamten Text auf einmal zu erstellen. Gibt es dazu Tipps?)

Skript:

# -*- coding: UTF-8 -*-
import sqlite3
import httplib
import urllib2
import os
from xml.dom import minidom, Node
from xml.etree import ElementTree

SITE = "http://data.stortinget.no/eksport/"
DATA = "data.db"

def get_perioder(cur):
    DOK = "stortingsperioder"
    try:
        page = urllib2.urlopen(SITE+DOK)
    except:
        print "Failed to fetch item "+DOK
   if page:
    tree = ElementTree.parse(page)
    root = tree.getroot()
    top = list(root)[2]
    elements = list(top)
    for el in elements:
        fra = el.find('{http://data.stortinget.no}fra').text
        per_id = el.find('{http://data.stortinget.no}id').text
        til = el.find('{http://data.stortinget.no}til').text
        print "id: %s fra: %s til: %s" % (per_id, fra, til)
        cur.execute("""INSERT INTO perioder(fra, id, til) VALUES('%s','%s','%s')""" % (fra, per_id, til))
else:
    print "Could not load page: "+DOK
return cur

def get_sesjoner(cur):
DOK = "sesjoner"
try:
     page = urllib2.urlopen(SITE+DOK)
except:
    print "Failed to fetch item "+DOK
if page:
    tree = ElementTree.parse(page)
    root = tree.getroot()
    top = list(root)[2]
    elements = list(top)
    for el in elements:
        fra = el.find('{http://data.stortinget.no}fra').text
        ses_id = el.find('{http://data.stortinget.no}id').text
        til = el.find('{http://data.stortinget.no}til').text
        assert attribute in (fra, ses_id, til)
        print "id: %s fra: %s til: %s" % (ses_id, fra, til)
        cur.execute("""INSERT INTO sesjoner(fra, id, til) VALUES(%s, %s, %s)""" % (fra, ses_id, til))
else:
    print "Could not load page: "+DOK
return cur

def get_emner(cur):
DOK = "emner"
try:
     page = urllib2.urlopen(SITE+DOK)
except:
    print "Failed to fetch item "+DOK

if not page:
    print "Could not load page:!! "+DOK
    return
tree = ElementTree.parse(page)
root = tree.getroot()
top = list(root)[1]
elements = list(top)
for el in elements:
    navn = el.find('{http://data.stortinget.no}navn').text
    main_emne_id = el.find("{http://data.stortinget.no}id").text
    print "HOVED: %s %s" % (navn, main_emne_id)
    cur.execute("""INSERT INTO hovedemner(id, navn) VALUES('%s','%s');""" % (main_emne_id, navn))
    if("true" in el.find("{http://data.stortinget.no}er_hovedemne").text):
        for uel in el.find("{http://data.stortinget.no}underemne_liste"):
            navn = uel.find("{http://data.stortinget.no}navn").text
            emne_id = uel.find("{http://data.stortinget.no}id").text
            print "UNDER: %s %s, horer til: %s" % (navn, emne_id, main_emne_id)
            cur.execute("""INSERT INTO underemner(id, navn, hovedemne_id) VALUES('%s', '%s', '%s');""" % (emne_id, navn, main_emne_id))
return cur


def get_fylker(cur):
DOK = "fylker"
try:
     page = urllib2.urlopen(SITE+DOK)
except:
    print "Failed to fetch item "+DOK

tree = ElementTree.parse(page)
root = tree.getroot()
top = list(root)[1]
elements = list(top)
for el in elements:
    fylke_id = el.find("{http://data.stortinget.no}id").text
    navn =  el.find("{http://data.stortinget.no}navn").text
    print ("id: %s, navn: %s") % (fylke_id, navn)
    cur.execute("""INSERT INTO fylker(id, navn) VALUES('%s','%s');""" % (fylke_id, navn))

return cur


def get_partier(cur):
DOK = "allepartier"
try:
     page = urllib2.urlopen(SITE+DOK)
except:
    print "Failed to fetch item "+DOK

tree = ElementTree.parse(page)
root = tree.getroot()
top = list(root)[1]
elements = list(top)
for el in elements:
    parti_id = el.find("{http://data.stortinget.no}id").text
    navn =  el.find("{http://data.stortinget.no}navn").text
    print ("id: %s, navn: %s") % (parti_id, navn)
    cur.execute("""INSERT INTO partier(id, navn) VALUES('%s','%s');""" % (parti_id, navn))

return cur

def get_komiteer(cur):
DOK = "allekomiteer"
try:
     page = urllib2.urlopen(SITE+DOK)
except:
    print "Failed to fetch item "+DOK

tree = ElementTree.parse(page)
root = tree.getroot()
top = list(root)[1]
elements = list(top)
for el in elements:
    kom_id = el.find("{http://data.stortinget.no}id").text
    navn = el.find("{http://data.stortinget.no}navn").text
    print "id: %s navn: %s" % (kom_id, navn)
    cur.execute("""INSERT INTO partier(id, navn) VALUES('%s','%s');""" % (kom_id, navn))
return cur


def get_representanter(cur):
DOK = "dagensrepresentanter"
try:
     page = urllib2.urlopen(SITE+DOK)
except:
    print "Failed to fetch item "+DOK

tree = ElementTree.parse(page)
root = tree.getroot()
top = list(root)[1]
elements = list(top)
for el in elements:
    doedsdato = el.find("{http://data.stortinget.no}doedsdato").text
    etternavn = el.find("{http://data.stortinget.no}etternavn").text
    foedselsdato = el.find("{http://data.stortinget.no}foedselsdato").text
    fornavn = el.find("{http://data.stortinget.no}fornavn").text
    repr_id = el.find("{http://data.stortinget.no}id").text
    kjoenn = el.find("{http://data.stortinget.no}kjoenn").text
    fylke = el.find("{http://data.stortinget.no}fylke/{http://data.stortinget.no}id").text
    parti = el.find("{http://data.stortinget.no}parti/{http://data.stortinget.no}id").text
    #komiteer = el.find("{http://data.stortinget.no}komiteer_liste/{http://data.stortinget.no}komite/{http://data.stortinget.no}id").text
    print "repr: %s, %s %s, parti: %s, fylke: %s" % (repr_id, fornavn, etternavn, parti, fylke)
    cur.execute("""INSERT INTO representanter(doedsdato, etternavn, foedselsdato, fornavn, id, kjoenn, fylke, parti) VALUES('%s','%s','%s','%s','%s','%s','%s','%s');""" % (doedsdato, etternavn, foedselsdato, fornavn, repr_id, kjoenn, fylke, parti))

return cur

def create_schema(cur):
cur.execute("DROP TABLE IF EXISTS perioder")
perioder = "CREATE TABLE  perioder(fra varchar(255), id varchar(255), til varchar(255))"
cur.execute("DROP TABLE IF EXISTS sesjoner")
sesjoner = "CREATE TABLE sesjoner(fra varchar(255), id varchar(255), til varchar(255))"
cur.execute("DROP TABLE IF EXISTS hovedemner")
hovedemner = "CREATE TABLE hovedemner(id int, navn varchar(255));"
cur.execute("DROP TABLE IF EXISTS underemner")
underemner = "CREATE TABLE underemner(id int, navn varchar(255), hovedemne_id int)"
cur.execute("DROP TABLE IF EXISTS fylker")
fylker = "CREATE TABLE fylker(id varchar(255), navn varchar(255));"
cur.execute("DROP TABLE IF EXISTS partier")
partier = "CREATE TABLE partier(id varchar(255), navn varchar(255));"
cur.execute("DROP TABLE IF EXISTS komiteer")
komiteer = "CREATE TABLE komiteer(id varchar(255), navn varchar(255));"
cur.execute("DROP TABLE IF EXISTS representanter")
representanter = "CREATE TABLE representanter(doedsdato varchar(255), etternavn varchar(500), foedselsdato varchar(255), fornavn varchar(500), id varchar(255), kjoenn varchar(255), fylke varchar(255), parti varchar(255));"
cur.execute(perioder)
cur.execute(sesjoner)
cur.execute(hovedemner)
cur.execute(underemner)
cur.execute(fylker)
cur.execute(partier)
cur.execute(komiteer)
cur.execute(representanter)
return cur


if __name__ == "__main__":
conn = sqlite3.connect(DATA)
cur = conn.cursor()
cur = create_schema(cur) 
cur = get_perioder(cur)
cur = get_sesjoner(cur)
cur = get_emner(cur)
cur = get_fylker(cur)
cur = get_partier(cur)
cur = get_komiteer(cur)
cur = get_representanter(cur)
conn.close

Antworten auf die Frage(1)

Ihre Antwort auf die Frage