gpt4 book ai didi

python - SQLite 和 Python。值写入没有错误,但程序终止后不在数据库中

转载 作者:太空宇宙 更新时间:2023-11-03 12:41:23 24 4
gpt4 key购买 nike

我在从 Internet 下载数据并将其放入 SQLite 数据库的脚本中遇到 Python 和 SQLite 问题。在执行开始时,我打开连接并分配游标。然后将此游标发送到下载数据并将其写入数据库的方法。到目前为止,我知道 create_schema 方法正在工作,因为数据库是使用正确的结构创建的,其他方法似乎失败了,但在脚本中执行时不会引发错误。我尝试使用 sqlite3 termninal 工具进入数据库并从表中选择值,但 select * 返回空结果。我不太确定光标如何与方法一起工作,但希望将其张贴在这里可以帮助我更好地理解。预先感谢您的帮助。

(PS:对缩进感到抱歉。我没有找到一次性对所有文本进行缩进的好方法。关于如何执行此操作的任何提示?)

脚本:

# -*- 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

最佳答案

据我所知,您最后没有调用 commit() 。但这可能不会将任何数据写入数据库。来自 SQLITE3 文档:

Connection.commit()

This method commits the current transaction. Ifyou don’t call this method, anything you did since the last call tocommit() is not visible from other database connections. If you wonderwhy you don’t see the data you’ve written to the database, pleasecheck you didn’t forget to call this method.

关于python - SQLite 和 Python。值写入没有错误,但程序终止后不在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11225644/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com