Udacity, Intro to Relational Databases
更新中:Udacity, Intro to Relational Databasesの受講メモ.5部構成の無料講座.
1. Data and Tables
- Databaseは,同時に複数の人が編集可能.これが,普通のファイルと異なる点.
- Tableは,headerとbodyからなる.headerは,table nameと,column nameと,column typeからなる.bodyは,rowsとcolumnsからなる.
- 複数の行に跨る演算をaggregationと呼ぶ.SQLで使えるaggregationの代表的なものとして,count,avg,max,min,sumなどがある.
- codeからdatabaseに
queryを出すと,resultを返される.resultは,原則的にTable形式. - Database中でデータの唯一性を担保するために,idを与えることがある.このように識別に用いられるcolumnを
primary keyと呼ぶ. - 複数の情報を持つオブジェクトを定義するよりは,複数のTableで管理したほうが効率的.
2. Elements of SQL
- SQLのtypeとして,
text,integer,dateなどがある.textおよびdateは,'2017-08-10'のようにシングルクォートで囲む.主なSQLのtypeは以下. - Text and string types
text:長さに制限のない文字列.Pythonのstrに相当.char(n):長さがnの文字列.varchar(n):長さが最大nの文字列.
- Numeric types
integer:整数型.Pythonのintに相当.real:浮動小数点型.Pythonのfloatに相当.精度は小数第6位.double precision:倍精度小数点.精度は小数第15位.decimal:正確な小数型(?).
- Date and time types
date:日付型.年,月,日.time:時刻型.timestamp:dateおよびtime.
- 基本構文:select columns from tables where condition;
- 出力数に制限を設けるとき:limit count [offset skip]
- 並び替えるとき:order by columns [desc]
- 結果をまとめるとき:group by columns
- 例えば,同じ名前の動物の数を数えるとき:
select name, count(*) as num from animals group by name;
- 例えば,同じ名前の動物の数を数えるとき:
- Pythonでも同様のことはできる.違いはスピードとメモリ.Databaseは格段に高速に,かつメモリ消費を抑えて実行できる.
- 新たに要素を追加するとき:insert into table values ( val1, val2, … );
- ただし,特定の列を指定して追加するときは:insert into table(column1, column2, …) values ( val1, val2, … );
- Databaseを結合するとき:T join S on T.color = S.paint
- 例えば,
fishを食べる動物の名前を抽出したとき:select name from animals join diet on animals.species=diet.species where food='fish';
- 例えば,
whereはgroup byの前に適用されるが,havingはgroup byの後に適用される.- Lesson 3に向けて,VirtualBoxとVagrantで環境を構築.Vagrantってこんな便利だったのか.
- 仮想環境構築:
$ vagrant up - ログイン:
$ vagrant ssh - ファイル共有は
/vagrantディレクトリ. - PostgreSQLの起動:
$ psql - ログアウト:
$ exitあるいはCtrl-D
- 仮想環境構築:
- VagrantとDockerの違いについては,以下が参考になった.
3. Python DB-API
- PythonからDatabaseを叩く際,DB-APIを用いる.DB-APIはPythonの組み込みモジュール.Databaseに応じて,DB-APIモジュールは異なる:SQLiteは
sqlite3,PostgreSQLはpsycopg2,ODBCはpyodbc,MySQLはmysql.connectorなど. - 例えば,次のようなPythonコードを書く.
- Databaseにおける追加や削除を行った後は,必ず
Connection.commit()する. - PostgreSQLを使って,簡易なForumサイトを作成する.実験環境を確認.
$ vagrant upで仮想環境を立ち上げ.$ vagrant sshで仮想環境にログイン.$ cd /vagrant/forumで当該ディレクトリに移動.$ python form.pyでForumサーバを起動.ブラウザでhttp://localhost:8000にアクセス.適当にMessageを投稿してみる.Ctrl+Cと$ python form.pyで再起動すると,先ほど投稿したMessageが消えていることがわかる.以降では,Messageを保存する機能をPostgreSQLで実装する.
4. Deeper into SQL
5. Tournament Database
Subscribe via RSS