望月の息抜き

在宅勤務の息抜きです。主にプログラミングについて書いていきたいと思います。

【SQL】【1】基本的なSQLの構文を覚えよう

【記事の目標】

SQLの構文を覚えよう。

基本的なCRUDの構文を覚えていきましょう。

 

【作業手順】

1.基本的なSELECT文を覚えよう

2.基本的なINSERT文を覚えよう

3.基本的なUPDATE文を覚えよう

4.基本的なDELETE文を覚えよう

 

1.基本的なSELECT文を覚えよう

SELECTの構文は以下です。

 SELECT 列名 FROM テーブル名 WHERE 条件文;

WHERE以降は任意です。

対象のテーブルの全列名と全データを取得したい場合は以下のように記載します。

 SELECT * FROM テーブル名;

「*」アスタリスクはすべてを表します。

 SELECT 列名1, 列名2, ... FROM テーブル名;

指定の列だけ取得したい場合は、カンマ区切りで列名を並べましょう。

 

2.基本的なINSERT文を覚えよう

INSERTの構文は以下です。

 INSERT INTO テーブル名 (列名1, 列名2,...) VALUES (1, 2,...);

テーブルに定義された列の順番にVALUESの中に指定できる場合は、テーブル名の後ろの列名を省略できます。

 INSERT INTO テーブル名 VALUES (1, 2,...);

 

3.基本的なUPDATE文を覚えよう

UPDATEの構文は以下です。

 UPDATE テーブル名 SET 列名1 = 1 WHERE 条件文;

複数の列を更新したい場合は、以下のようにカンマ区切りで追加していきましょう。

 UPDATE テーブル名 SET 列名1 = 1, 列名2 = 2, ... WHERE 条件文;

 

4.基本的なDELETE文を覚えよう

DELETEの構文は以下です。

 DELETE FROM テーブル名 WHERE 条件文;

テーブル内の全データを削除したい場合は、以下だけで出来てしまいます。

 DELETE FROM テーブル名;

簡単ですが、すべてのデータを消してしまうので、あまり利用しませんね。

 

 

Python】記事の【11】と【12】で、データベースの操作を記事にしましたが、その中で触れたSQL文についてはさらっと流しましたので、本当に基本的な構文をまとめてみました。

SELECTについては、この構文のまま使うことはあまりなく、結合であったり、副問い合わせだったりと、いろいろな構文を混ぜて指定したデータを取るのが一般的かと思います。

まずは、簡単な構文から実行してみて、そこからテーブルを増やして、取得したいデータを取得してみる、といった形が良いかと思います。

【Python】【12】データを操作してみよう

【記事の目標】

Pythonでデータベースを使って、テーブルに対してCRUD操作をしてみよう。

 

【作業手順】

1.SQLiteをインポートして、データベースへ接続しよう

2.データを登録しよう

3.登録したデータを取得しよう

4.データを更新しよう

5.データを削除しよう

 

1.SQLiteをインポートして、データベースへ接続しよう

【11】で実施した手順と同じです。

まず、SQLiteをインポートします。

 import sqlite3

データべース blog_test に接続しましょう。

 db_name = 'blog_test'
connect = sqlite3.connect(db_name)

これで、接続完了です。

 

2.データを登録しよう

まず、Cursorオブジェクトを作成しましょう。

 cursor = connect.cursor()

では、データを登録するSQLを定義します。

今回は後続の説明で作成するため、2レコード登録します。

 cursor.execute("INSERT INTO first_table VALUES (?,?)", (1, 'あいうえお'))
cursor.execute("INSERT INTO first_table VALUES (?,?)", (2, 'かきくけこ'))

これで、1レコード目には「あいうえお」、2レコード目には「かきくけこ」が登録されます。

最後にコミットとクローズを行います。

 connect.commit()
connect.close()

では実行してみましょう。

f:id:fysker:20220115171502p:plain

エラーは出ていないので登録は成功していると思いますが、本当に大丈夫か不安になってしまいますね。

次のステップで登録されたデータを確認しましょう。

 

3.登録したデータを取得しよう

先ほど記載していたコードは一度削除かコメントアウトしましょう。

まずは、インポートとデータベースの作成とcursorオブジェクトの作成ですね。

 import sqlite3
 db_name = 'blog_test'
connect = sqlite3.connect(db_name)
 cursor = connect.cursor()

ここまでは基本一緒なのでだんだんと慣れてきたのではないでしょうか。

次に取得用のSQLを定義します。

 cursor.execute("SELECT * FROM first_table")

本当に取得出来ているかを確認するためにコンソールに出力してみましょう。

 for row in cursor.fetchall():
print(row)

最後にデータベースのクローズを行います。

 connect.close()

では実行してみましょう。

f:id:fysker:20220115172021p:plain

「2.」で登録した値が取得できていますね。

 

4.データを更新しよう

先ほど記載していたコードは一度削除かコメントアウトしましょう。

まずは、インポートとデータベースの作成とcursorオブジェクトの作成ですね。

 import sqlite3
 db_name = 'blog_test'
connect = sqlite3.connect(db_name)
 cursor = connect.cursor()

次に、更新用のSQLを定義します。

 cursor.execute("UPDATE first_table SET value = 'さしすせそ' WHERE id = 1")

1レコード目に登録した「あいうえお」を「さしすせそ」に更新するSQLです。

最後にコミットとクローズを行います。

 connect.commit()
connect.close()

では実行してみましょう。

f:id:fysker:20220115172440p:plain

更新されているかわからないので、「3.登録したデータを取得しよう」をもう一度実施してみましょう。

実行結果は以下になります。

f:id:fysker:20220115172534p:plain

1レコード目の値が「さしすせそ」に書き換わっていますね。

 

5.データを削除しよう

先ほど記載していたコードは一度削除かコメントアウトしましょう。

まずは、インポートとデータベースの作成とcursorオブジェクトの作成ですね。

 import sqlite3
 db_name = 'blog_test'
connect = sqlite3.connect(db_name)
 cursor = connect.cursor()

次に、削除用のSQLを定義します。

 cursor.execute("DELETE FROM first_table WHERE id = 1")

1レコード目に登録したデータを削除するSQLです。

最後にコミットとクローズを行います。

 connect.commit()
connect.close()

では実行してみましょう。

f:id:fysker:20220115172848p:plain

削除されているかわからないので、「3.登録したデータを取得しよう」をもう一度実施してみましょう。

実行結果は以下になります。

f:id:fysker:20220115172924p:plain

1レコード目は削除されて、2レコード目が取得されていますね。

 

【補足】

CRUDって何?

CRUDというのは、「Create(登録機能)」「Read(参照機能)」「Update(更新機能)」「Delete(削除機能)」の頭文字を並べた用語になります。

 

 

今回は【11】で作成したテーブルに対するCRUD操作をしてみました。

登録、参照、更新、削除、すべて実施しましたが結構ボリュームが多かったですね。

データベースの操作はSQL文が全てですので、いろいろなデータを登録して、取得したいデータを取得するSQL文を書いてみるのも面白いと思います。

データベース操作が苦手な私でも、開発となるとSQL文を書かなければならないので、基礎だけはおさえておきましょう。

【Python】【11】データベースを作ってみよう

【記事の目標】

Pythonでデータベースを新規作成し、テーブルを作成してみよう。

 

【作業手順】

1.SQLiteをインポート

2.データベースを作成しよう

3.テーブルを作成しよう

4.コミットしてみよう

5.テーブルが作成出来ているか確認しよう

 

1.SQLiteをインポート

標準ライブラリのため、インストールの必要はありません。

以下のようにインポートしましょう。

 import sqlite3

これで、SQLiteが利用できるようになりました。

 

2.データベースを作成しよう

データベースを作成してみましょう。

 db_name = 'blog_test'
connect = sqlite3.connect(db_name)

blog_test というデータベースを作成します。

sqlite3.Cnnectionオブジェクトを変数connectに格納しています。

 

3.テーブルを作成しよう

以下のようなテーブルを作成します。

 テーブル名:first_table

 カラム1:id (primary key)

 カラム2:value

では実際に書いてみましょう。

 sql = 'CREATE TABLE IF NOT EXISTS first_table (id INTEGER PRIMARY KEY AUTOINCREMENT, value TEXT)'
cursor = connect.cursor()
cursor.execute(sql)

2行目は sqlite.Cursorオブジェクトを変数cursorに格納しています。

cursorのexecuteに実行したいSQLを渡しましょう。

 

4.コミットしてみよう

「2.」「3.」とコードを書いてきましたが、これを実行してもテーブルは作成されません。

実行を完了させるために、コミットを行いましょう。

 connect.commit()
connect.close()

これで、データベースを作成して、テーブルが作成されます。

f:id:fysker:20220115163718p:plain

main.py と同じ階層に blog_test というデータベースファイルが作成されています。

f:id:fysker:20220115165746p:plain

でも、本当にデータベースやテーブルが作成されたか、いまいちわかりませんね。

次のステップで作成できているか確認しましょう。

 

5.テーブルが作成出来ているか確認しよう

確認するために、先ほど記載していたコードは一度削除かコメントアウトしましょう。

まずは、インポートとデータベースの作成ですね。

 import sqlite3
 db_name = 'blog_test'
connect = sqlite3.connect(db_name)

さっき作っていたのにまた同じコードで大丈夫なの?

と思った方もいると思いますが、すでに存在しているデータベース名の場合は新しく作成されずに、存在しているデータベースにアクセスされます。

 

では、抽出用のSQLを書いていきましょう。

今回はテーブルが出来ているかを確認したいため、テーブルの一覧を取得するSQLを実行していきましょう。

 sql = 'SELECT * from sqlite_master WHERE TYPE="table"'
cursor = connect.cursor()
cursor.execute(sql)

これで、データベースにあるテーブルの一覧が取得できます。

本当に取得出来ているかを確認するためにコンソールに出力してみましょう。

 for row in cursor.fetchall():
print(row)

cursor.fetchall() で、実行したSELECT文の取得結果が全て取得できます。

最後にConnectionをcloseしましょう。

 connect.close()

実行すると以下のようにテーブル一覧が出力されます。

f:id:fysker:20220115164628p:plain

今回作成した、first_table が出来ていることが確認できました。

 

 

今回は、テーブルの作成まで実施しました。

初めて触れる方だと、SQL文が難しく感じてしまうと思います。

特にpythonと関係ないのでSQLについてはさらっと流していますが、別の記事でSQL文について触りだけでも説明しようかと考えています。

 

記事を書いていて、テーブルの作成だけで結構多いなと感じてしまったため、データの登録や参照については次回触れようと思います。

【Python】【10】reduce関数を使ってみよう

【記事の目標】

reduce関数を使ってみる

 

【作業手順】

1.reduce関数ってどんな時に使うの?

2.reduce関数の使い方

3.reduce関数を実際に使ってみよう

 

1.reduce関数ってどんな時に使うの?

例えば、[1, 2, 3, 4]というイテラブルに対して、

 全て加算したい→1+2+3+4=10

 全て乗算したい→1*2*3*4=24

という場合に利用します。

for文で繰り返し処理をしても良いですが、reduce関数を使うことで、ソースがよりシンプルになります。

 

2.reduce関数の使い方

reduce関数は、

 第1引数(必須):function(関数)

 第2引数(必須):iterable(イテラブル)

 第3引数(任意):initializer

を指定できます。

第3引数のinitializerは任意での設定になりますが、第2引数のiterableの先頭に設定されるものとなります。

デフォルト値のようなものですね。

reduce関数は、

 reduce(function, iterable, initializer)

の形で書くことが出来ます。

 

3.reduce関数を実際に使ってみよう

今回はpython3系の場合は、インポートが必要となります。

 from functools import reduce

これでreduce関数が使えるようになりました。

では、数字が入った配列を用意して、すべての要素に1を足す処理を書いてみましょう。

まず、数字の入った配列を定義します。

 args = [1, 2, 3, 4]

次に引数1と引数2を足したものを返却する関数を作成します。

 def add(num1, num2):
return num1 + num2

では、最後にreduce関数を使って、要素全てを足し合わせてみましょう。

 result = reduce(add, args)
print(result)

それでは実行してみましょう。

f:id:fysker:20220110161647p:plain

要素全てを足した10が表示されていますね。

 

【補足】

・無名関数(ラムダ式)を使うともっとシンプルに

今回のようにすべての要素を足し合わせるだけの簡単な処理であれば、無名関数を使うともっとシンプルになります。

記載方法は以下のようになります。

 result = reduce(lambda a, b: a+b, args)

「3.」で作成した add の関数を書く必要はありません。

この記載だけですべての要素を足し合わせることができます。

 

・initializerに設定するとどうなるの?

今回の要素のデフォルト値として 5 を設定してみましょう。

 result = reduce(add, args, 5)

第3引数に 5 を設定して実行してみます。

f:id:fysker:20220110162041p:plain

計算結果は 15 となりました。

初めに第3引数の 5 が加算され、そこにすべての要素を加算した形になりましたね。

 

・iterableが空の場合はどうなるの?

第2引数のiterableが空の場合、エラーが出力されます。

「3.」で作成したmain.pyの定義した要素を空にして、

 args = []

実行してみます。

f:id:fysker:20220110162618p:plain

 

また、第3引数を入れてエラーを回避することもできます。

要素は空にしたまま、reduce関数の第3引数に 5 を設定します。

 result = reduce(add, args, 5)

これで実行してみましょう。

f:id:fysker:20220110162835p:plain

エラーは出力されずに、 5 という結果が表示されましたね。

 

 

今回は少し難しかったかもしれません。

足し算ではなく、引き算や掛け算にしてご自身で試してみるのも良いかと思います。

気分転換に関数を使ってみましたが、様々な場面で使えそうですね。

【Python】【9】filter関数を使ってみよう

【記事の目標】

filter関数を使ってみる

 

【作業手順】

1.filter関数ってどんな時に使うの?

2.filter関数の使い方

3.filter関数を実際に使ってみよう

 

1.filter関数ってどんな時に使うの?

リストの中で条件に当てはまるものだけ取り出したいときに利用します。

 

2.filter関数の使い方

filter関数は

 filter(関数, リスト)

の形で書くことが出来ます。

filter関数の戻り値はfilterオブジェクトになるため、リストとして使う場合は以下のように書きましょう。

 list(filter(関数, リスト))

 

3.filter関数を実際に使ってみよう

今回は特にインポートは必要ありません。

では、要素の中で2で割った余りが0のものだけ取り出す処理を書いてみましょう。

まず、数字の入った配列を定義します。

 args = [1, 2, 3]

次に2で割って0余るかどうかを判定する関数を作成します。

 def isEven(num):
return num % 2 == 0

では、最後にfilter関数を使って、定義した配列の要素から2で割った余りが0のものを取り出す処理を書きましょう。

 result = list(filter(isEven, args))
print(result)

それでは実行してみましょう。

f:id:fysker:20220109221513p:plain

2で割った余りが0のものだけ取り出されていますね。

 

【補足】

・list()を付けなかったらどうなるの?

「2.」でも補足していますが、filterオブジェクトのまま出力されてしまします

以下のようになるので、注意です。

f:id:fysker:20220109221805p:plain

 

・無名関数(ラムダ式)を使うともっとシンプルに

簡単な比較処理であれば、無名関数を使うともっとシンプルになります。

記載方法は以下のようになります。

 result = list(filter(lambda n: n % 2 == 0, args))

「3.」で作成した isEvenの関数を書く必要はありません。

この記載だけですべての要素から2で割った余りが0のものを取り出すことができます。

 

 

今回も、関数を使ってみました。

簡単だったと思いますが、【8】のmap関数と組み合わせると便利そうですね。

様々な関数を知っておくことで、実際にコードを書こうとするときに、どうやって実現するかの選択肢になりますね。

【Python】【8】map関数を使ってみよう

【記事の目標】

map関数を使ってみる

 

【作業手順】

1.map関数ってどんな時に使うの?

2.map関数の使い方

3.map関数を実際に使ってみよう

 

1.map関数ってどんな時に使うの?

配列のすべての要素に対して、処理をしたいときに利用します。

for文で繰り返し処理をしても良いですが、map関数を使うことで、ソースがよりシンプルになります。

 

2.map関数の使い方

map関数は

 python2系:map(関数, イテラブル)

 python3系:list(map(関数, イテラブル))

の形で書くことが出来ます。

イテラブルはlistやrange関数のことを指しています。

for文を書くときにinの後に書くオブジェクトのことです。

 

3.map関数を実際に使ってみよう

今回は特にインポートは必要ありません。

では、数字が入った配列を用意して、すべての要素に1を足す処理を書いてみましょう。

まず、数字の入った配列を定義します。

 args = [1, 2, 3]

次に1を足す関数を作成します。

 def add_one(num):
return num + 1

では、最後にmap関数を使って、定義した配列の要素全てに1を足す処理を書きましょう。

 result = list(map(add_one, args))
print(result)

それでは実行してみましょう。

f:id:fysker:20220109214654p:plain

定義したargsのすべての要素に1が足されて表示されていますね。

 

【補足】

・list()を付けなかったらどうなるの?

list()で囲んでいない場合は、mapオブジェクトのまま出力されてしまいます。

以下のようになるので、注意です。

f:id:fysker:20220109214951p:plain

 

・無名関数(ラムダ式)を使うともっとシンプルに

今回のようにすべての要素に1を足すだけの簡単な処理であれば、無名関数を使うともっとシンプルになります。

記載方法は以下のようになります。

 result = list(map(lambda n: n+1, args))

「3.」で作成した add_one の関数を書く必要はありません。

この記載だけですべての要素に1を足すことができます。

 

 

今まで様々なライブラリを使ってきたので、今回は関数を使ってみました。

今までの記事に比べて簡単な内容ですが、前回の記事のように「ブラウザを動かせる!」みたいなインパクトはないですね。

でも、私が初めてプログラミングを始めた時は、四則演算はができただけで結構満足していました。

「楽しい」という感情が続けていく何よりの原動力と思います。

【Python】【7】Webページを操作してみよう

【記事の目標】

PythonでWebページを操作する。

Microsoft EdgeGoogleのトップページにて検索バーにキーワードを入力し検索を実施する。

 

【作業手順】

1.Seleniumをインストール

2.Seleniumをインポート

3.Microsoft Edge Driverを取得しよう

4.対象のページへアクセスしよう

5.検索バーにキーワードを入力する

6.検索を実施してみよう

 

1.Seleniumをインストール

まずは、自分の開発環境にSeleniumをインストールしましょう。

ターミナルにて以下コマンドを実行しましょう。

 linuxの場合:pip install Selenium
 windowsの場合:python -m pip install Selenium

windowsの場合は「py -m」を先頭に付ける必要があるので注意です。

以下のように、コマンド実行後にSuccessfully...と表示されれば完了です。

f:id:fysker:20220107220633p:plain

 

2.Seleniumをインポート

以下のようにインポートしましょう。

 from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

これで、Seleniumが利用できるようになりました。

 

3.Microsoft Edge Driverを取得しよう

今回はMicrosoft Edgeを使います。

そのために、以下リンクからご自身のEdgeのバージョンと同じDriverを取得しましょう。

Microsoft Edge Driver - Microsoft Edge Developer

f:id:fysker:20220107223942p:plain

※Edgeのバージョンについて

Edgeのバージョンは設定の「Microsoft Edgeについて」から確認できます。

f:id:fysker:20220107224137p:plain

 

4.対象のページへアクセスしよう

まずは、「3.」で取得したDriverを解凍して格納した場所を定義しましょう。

 EDGE_PATH = 'Microsoft Edge Driverの格納場所'

指定するファイルは「msedgedriver.exe」です。

Windowsからディレクトリを指定する場合は、¥マークは2つ続けて記載するようにしましょう。

 例:C:\\Programfiles...

 

では、Driverを使ってページにアクセスしてみましょう。

 driver = webdriver.Edge(service=Service(EDGE_PATH))
driver.get("https://www.google.co.jp/")

Driverの場所を読み込んで、Googleのトップページにアクセスするコードです。

 

ここまで、動かしてみても良いです。

Googleのトップページが開きます。

 

5.検索バーにキーワードを入力する

最後に、検索バーにキーワードを設定してみましょう。

 search_input = driver.find_element(By.NAME, "q")
search_input.send_keys("python")

"q"という名前のelementに"python"という文字列を設定するコードです。

 

なぜ"q"か?

Googleのトップページで開発者ツールを利用し、検索バーの情報を見てみましょう。

f:id:fysker:20220107225350p:plain

 

6.検索を実施してみよう

Googleのトップページで検索を行うには、キーワードを入力した後に、「Enter」キーを押す必要があります。

「5.」の行に続けて、以下を追加します。

 search_input.send_keys(Keys.ENTER)

検索バーで「Enter」キーを押すコードです。

 

それでは、実行してみましょう。

f:id:fysker:20220108033151p:plain

自動でEdgeが開きGoogleのホームページを開き、検索バーに"python"を入力し、Enterキーが押され、検索が実行されました。

 

 

今回は結構ボリュームが多めでしたが、いかがでしたでしょうか。

【5】【6】と、RequestsやBeautiful Soupを使ってWebサイトを解析してきましたが、今回はSeleniumを使ってWebページの操作をやってみました。

自動化に少し触れて、プログラミングの良さであったり、業務の効率化につながりそうと感じていただければ幸いです。