開発環境
- OS X Mavericks - Apple、たまにFreeBSD 10(OS)
- Emacs (CUI)、BBEdit - Bare Bones Software, Inc. (GUI) (Text Editor)
- Python (プログラミング言語)
- SQLite (RDBMS(Relational Database Management System))
Head First SQL ―頭とからだで覚えるSQLの基本 (Lynn Beighley(著)、 佐藤 直生 (監訳)、 松永 多苗子 (翻訳)、オライリージャパン)の1章(データとテーブル: あらゆるものにふさわしい場所)、自分で考えてみよう(p.39)を解いてみる。
自分で考えてみよう(p.39)
コード(BBEdit, Emacs)
sample39.py
#!/usr/bin/env python3 #-*- coding: utf-8 -*- import sqlite3 import sys connection = sqlite3.connect('gregs_list.sqlite') cursor = connection.cursor() # 列と値の数が異なっている。locationの値がない。 try: cursor.execute( """ INSERT INTO my_contacts( last_name, first_name, email, gender, birthday, profession, location, status, interests, seeking) VALUES ( 'アンダーソン', 'ジリアン', 'jill_anderson@breakneckpizza.com', 'F', '1980-09-05', 'テクニカルライター', '独身', 'カヤック乗り、爬虫類', 'seeking') """ ) except Exception: print(sys.exc_info()) # 列と値の数が異なっている。列emailがない。 try: cursor.execute( """ INSERT INTO my_contacts ( last_name, first_name, gender, birthday, profession, location, status, interests, seeking) VALUES ( 'last', 'first', 'xxx@example.com', 'F', '1980-09-05', 'pro', 'loc', 's', 'interests', 'seeking') """ ) except Exception: print(sys.exc_info()) # professionの値(テクニカルライター)とlocationの値(カリフォルニア州パロアルト)の # 間にカンマ(,)がない try: cursor.execute( """ INSERT INTO my_contacts( last_name, first_name, email, gender, birthday, profession, location, status, interests, seeking) VALUES ( 'last', 'first', 'email', 'F', '1980-09-05', 'pro' 'loc', 's', 'i', 's') """ ) except Exception: print(sys.exc_info()) # seekingの値(恋人、友達)がシングルクォートで括られていない try: cursor.execute( """ INSERT INTO my_contacts( last_name, first, email, gender, birthday, profession, location, status, interests, seeking) VALUES ( 'last', 'first', 'email', 'F', '1980-09-05', 'pro', 'loc', 's', 'i', '恋人、友達) """ ) except Exception: print(sys.exc_info()) cursor.execute("""SELECT * FROM my_contacts""") print(cursor.fetchall()) connection.close()
入出力結果(Terminal, IPython)
$ ./sample39.py (<class 'sqlite3.OperationalError'>, OperationalError('9 values for 10 columns',), <traceback object at 0x102835408>) (<class 'sqlite3.OperationalError'>, OperationalError('10 values for 9 columns',), <traceback object at 0x102835408>) (<class 'sqlite3.OperationalError'>, OperationalError('near "\'loc\'": syntax error',), <traceback object at 0x102835408>) (<class 'sqlite3.OperationalError'>, OperationalError('unrecognized token: "\'恋人、友達)\n"',), <traceback object at 0x102835408>) [('jill_anderson@breakneckpizza.com', '1980-09-05', 'ジリアン', 'アンダーソン', 'カヤック乗り、爬虫類', '恋人、友達', '独身', 'テクニカルライター', 'カリフォルニア州パロアルト', 'F')] $
0 コメント:
コメントを投稿