開発環境
- macOS Mojave - Apple (OS)
- Emacs (Text Editor)
- Windows 10 Pro (OS)
- Visual Studio Code (Text Editor)
- PostgreSQL (ORDBMS(object-relational database management system))
- Python 3.7 (プログラミング言語)
- psycopg2 (パッケージ)
Head First SQL ―頭とからだで覚えるSQLの基本 (Lynn Beighley (著), 佐藤 直生 (監訳)、松永 多苗子 (翻訳)、オライリージャパン)の2章(SELECT文 - 天賦のデータ検索)、エクササイズ(p. 112).を取り組んでみる。
コード(Emacs)
Python 3
#!/usr/bin/env python3 import psycopg2 as sql conn = sql.connect(database='gregs_list', user='kamimura') cursor = conn.cursor() _sql = ''' create table if not exists black_book( date_name varchar(20), rating varchar(20)) ''' cursor.execute(_sql) _sql = '''insert into black_book values(%s, %s)''' values = [('アレックス', '斬新'), ('ジェームス', '退屈'), ('イアン', '驚くべき'), ('ポリス', 'つまらない'), ('メルビン', '下層階級'), ('エリック', '情けない'), ('アンソニー', '楽しい'), ('サミー', 'かなりいい'), ('イヴァン', '陰気'), ('ヴィック', '話にならない')] cursor.executemany(_sql, values) conn.commit() tables = ['easy_drinks', 'drink_info', 'black_book'] for table in tables: print(table) _sql = f'select * from {table}' cursor.execute(_sql) print(', '.join([column[0] for column in cursor.description])) for row in cursor.fetchall(): print(row) _sqls = [ ''' select drink_name from easy_drinks where amount1 >= 1.50 ''', ''' select drink_name from drink_info where ice <> 'Y' ''', ''' select drink_name from drink_info where calories >= 20 ''', ''' select drink_name from drink_info where calories > 0 ''', ''' select drink_name from drink_info where carbs < 3 or carbs > 5 ''', ''' select date_name from black_book where substring(date_name from 1 for 1) not between 'ア' and 'イ' ''' ] for _sql in _sqls: print(_sql) cursor.execute(_sql) for row in cursor.fetchall(): print(row) cursor.close() conn.close()
入出力結果(Terminal, cmd(コマンドプロンプト), Jupyter(IPython))
$ ./sample11.py easy_drinks drink_name, main, amount1, second, amount2, directions ('ブラックソーン', 'トニックウォーター', 1.5, 'パイナップルジュース', 1.0, '氷と一緒にかき混ぜ、濾してカクテルグラスに入れ、レモンを一搾り加える') ('ブルームーン', 'ソーダ', 1.5, 'ブルーベリージュース', 0.75, '氷と一緒にかき混ぜ、濾してカクテルグラスに入れ、レモンを一搾り加える') ('オーマイゴッシュ', '桃果汁', 1.0, 'パイナップルジュース', 1.0, '氷と一緒にかき混ぜ、濾してショットグラスに入れる') ('ライムフィズ', 'スプライト', 1.5, 'ライムジュース', 0.75, '氷と一緒にかき混ぜ、濾してカクテルグラスに入れる') ('キスオンザリップス', 'チェリージュース', 2.0, 'あんず果汁', 7.0, '氷の上に注いで、ストローを付ける') ('ホットゴールド', '桃果汁', 3.0, 'オレンジジュース', 6.0, '熟したオレンジジュースをマグカップに注いで、桃果汁を加える') ('ローンツリー', 'ソーダ', 1.5, 'チェリージュース', 0.75, '氷と一緒にかき混ぜ、濾してカクテルグラスに入れる') ('グレイハウンド', 'ソーダ', 1.5, 'グレープフルーツジュース', 5.0, '氷の上に注いで、よく混ぜる') ('インディアンサマー', 'アップルジュース', 2.0, 'ホットティー', 6.0, 'ジュースをマグカップに加え、ホットティーで仕上げる') ('ブルフロッグ', 'アイスティー', 1.5, 'レモネード', 5.0, '氷の上に注いでライムを一切れ加える') ('シーダアンドイット', 'ソーダ', 2.0, 'グレープジュース', 1.0, '氷を入れずに、カクテルグラスでシェイクする') drink_info drink_name, cost, carbs, color, ice, calories ('ブラックソーン', 3.0, 8.4, '黄', 'Y', 33) ('ブルームーン', 2.5, 3.2, '青', 'Y', 12) ('オーマイゴッシュ', 3.5, 8.6, '橙', 'Y', 35) ('ライムフィズ', 2.5, 5.4, '緑', 'Y', 24) ('キスオンザリップス', 5.5, 42.5, '紫', 'Y', 171) ('ホットゴールド', 3.2, 32.1, '橙', 'N', 135) ('ローンツリー', 3.6, 4.2, '赤', 'Y', 17) ('グレイハウンド', 4.0, 14.0, '黄', 'Y', 50) ('インディアンサマー', 2.8, 7.2, '茶', 'N', 30) ('ブルフロッグ', 2.6, 21.5, '黄褐色', 'Y', 80) ('ソーダアンドイット', 3.8, 4.7, '赤', 'N', 19) black_book date_name, rating ('アレックス', '斬新') ('ジェームス', '退屈') ('イアン', '驚くべき') ('ポリス', 'つまらない') ('メルビン', '下層階級') ('エリック', '情けない') ('アンソニー', '楽しい') ('サミー', 'かなりいい') ('イヴァン', '陰気') ('ヴィック', '話にならない') select drink_name from easy_drinks where amount1 >= 1.50 ('ブラックソーン',) ('ブルームーン',) ('ライムフィズ',) ('キスオンザリップス',) ('ホットゴールド',) ('ローンツリー',) ('グレイハウンド',) ('インディアンサマー',) ('ブルフロッグ',) ('シーダアンドイット',) select drink_name from drink_info where ice <> 'Y' ('ホットゴールド',) ('インディアンサマー',) ('ソーダアンドイット',) select drink_name from drink_info where calories >= 20 ('ブラックソーン',) ('オーマイゴッシュ',) ('ライムフィズ',) ('キスオンザリップス',) ('ホットゴールド',) ('グレイハウンド',) ('インディアンサマー',) ('ブルフロッグ',) select drink_name from drink_info where calories > 0 ('ブラックソーン',) ('ブルームーン',) ('オーマイゴッシュ',) ('ライムフィズ',) ('キスオンザリップス',) ('ホットゴールド',) ('ローンツリー',) ('グレイハウンド',) ('インディアンサマー',) ('ブルフロッグ',) ('ソーダアンドイット',) select drink_name from drink_info where carbs < 3 or carbs > 5 ('ブラックソーン',) ('オーマイゴッシュ',) ('ライムフィズ',) ('キスオンザリップス',) ('ホットゴールド',) ('グレイハウンド',) ('インディアンサマー',) ('ブルフロッグ',) select date_name from black_book where substring(date_name from 1 for 1) not between 'ア' and 'イ' ('ジェームス',) ('ポリス',) ('メルビン',) ('エリック',) ('サミー',) ('ヴィック',) $
0 コメント:
コメントを投稿