前提・実現したいこと
入門Python3(オライリー・ジャパン)p272の復習課題8-7において、前問の8-6で作成したbooks.csvを読み出し、そのデータをbookテーブルに挿入したいです。ちなみに8-6は「sqlite3モジュールを用いて、books.dbというSQLiteデータベースを作り、その中にtitle(文字列)、'year'(整数)というフィールドを持つbookというテーブルを作ろう」です。正しく動作すれば以下のように表示されます。
Python3
1#8-6(bookというテーブルを作成) 2>>> import sqlite3 3>>> db = sqlite3.connect('books.db') 4>>> curs = db.cursor() 5>>> curs.execute('''create table book (title text, author text, year int)''') 6<sqlite3.Cursor object at 0x1090561f0> 7>>> db.commit() 8#8-7(book.csvを読み出し、そのデータをbookテーブルに挿入) 9>>> import csv 10>>> import sqlite3 11>>> ins_str = 'insert into book values(?, ?, ?)' 12>>> with open('books.csv', 'rt') as infile: 13... books = csv.DictReader(infile) 14... for book in books: 15... curs.execute(ins_str, (book['title'], book['author'], book['year'])) 16... 17<sqlite3.Cursor object at 0x1007b21f0> 18<sqlite3.Cursor object at 0x1007b21f0> 19<sqlite3.Cursor object at 0x1007b21f0> 20<sqlite3.Cursor object at 0x1007b21f0> 21<sqlite3.Cursor object at 0x1007b21f0>
発生している問題・エラーメッセージ
以下のようにKeyErrorが発生します。
該当のソースコード
Python3
1>>> import csv 2>>> import sqlite3 3>>> ins_str = 'insert into book values(?, ?, ?)' 4>>> with open('books.csv', 'rt') as infile: 5... books = csv.DictReader(infile) 6... for book in books: 7... curs.execute(ins_str, (book['title'], book['author'], book['year'])) 8... 9Traceback (most recent call last): 10 File "<stdin>", line 4, in <module> 11KeyError: 'title'
補足情報(FW/ツールのバージョンなど)
PCはMacを用いています。また、8-6の前問の8-5では以下のようにbooks.csvというCSVファイルを作成しています。
Python3
1>>> text = '''title, author, year 2... The Weirdstone of Brisingamen, Alan Garner, 1960 3... Perdido Street Station, China Mieville, 2000 4... Thud!, Terry Pratchett, 2005 5... The Spellmen Files, Lisa Lutz, 2007 6... Small Gods, Terry Pratchett, 1992 7... ''' 8>>> with open('books.csv', 'wt') as outfile: 9... outfile.write(text) 10... 11213 12
回答1件
あなたの回答
tips
プレビュー