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