Pythonファイルを操作してMySQLにデータを保存したり、操作したりと色々やってみたい人のための紹介記事になります。
コンテンツ
開発環境
環境は以下になります。
・OS Mac 10.15
・Python 3.8
・pipenv
MySQLのインストール
既にMySQLをインストール済みの人は飛ばして構いませんが、まだの人はMySQLのインストールから実行していきます。
MySQLはオープンソースのリレーショナルデータベースで、様々なプログラミング言語から簡単に使用でき、大規模でもスケールアウトによる性能向上が見込めることから、人気のあるデータベースです。
macOSではhomebrewでインストールします。
homebrewって何?っていうwindowsユーザーはネットで必ず調べてください。
$ brew install mysql
バージョン確認はこのコマンドでできます。
$ mysqld --version
>> /usr/local/Cellar/mysql/8.0.21_1/bin/mysqld Ver 8.0.21 for osx10.15 on x86_64 (Homebrew)
MySQLサーバーの起動
MySQLサーバーを起動します。
$ mysql.server start
これで立ち上がったので正常に起動されているかを下記コマンドで確認できます。
$ mysql.server status
>> SUCCESS! MySQL running (1143)
データベースとユーザーの作成
実際にデータを格納するためのデータベースを作成します。
また接続に必要なユーザーも作成します。
$ mysql -u root
ちなみに-uはユーザーという意味です。
そしてrootユーザーでログインをするという意味です。
コマンド入力するとこの様な画面になったかと思います。
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.21 Homebrew
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
それではここから入力を続けていきます。
# デフォルト文字コードがutf8mb4のsampleという名前のデータベースを作成します。
mysql> create database sample default character set utf8mb4;
Query OK, 1 row affected(0.00 sec)
# localhostから接続可能なユーザーtestを作成し、パスワードはpasswordに設定します。
mysql> create user test@localhost identified by 'password';
Query OK, 0 rows affected(0.00 sec)
# 作成したユーザーtestにデータベースsampleを読み書き可能な権限を与えます。
mysql> grant all on scraping.* to test@localhost;
Query OK, 1 row affected(0.00 sec)
完了したので抜けます。
$ mysql> quit
mysqlclientをインストール
PythonからMySQLに接続するのためのライブラリをインストールします。
私ヒロヤンはpipenvにインストールさせます。
$pipenv install mysqlclient
pipenvがわからないという人はpipでもインストールできます。
$pip install mysqlclient
Pythonコードでデータの実行と保存をする
それでは以下に実際のコードを書いていきます。
sample.py
import MySQLdb
conn = MySQLdb.connect(db='sample', user='test', passwd='password', charset='utf8mb4')
# カーソルを取得する。
c = conn.cursor()
# execute()メソッドでSQL文を実行する。
# このスクリプトを何回実行しても同じ結果になる様にするため、citiesテーブルが存在する場合は削除する。
c.execute('DROP TABLE IF EXISTS cities')
# citiesテーブルを作成する。
c.execute('''
CREATE TABLE `cities` (
`rank` integer,
`city` text,
`population` integer
)
''')
# execute()メソッドの第二引数にはSQL文のパラメーターのリストを指定できる。
# パラメーターで置き換える場所(プレースホルダー)は%sで指定する。
c.execute('INSERT INTO cities VALUES (%s, %s, %s)', (1, '東京', 13982622))
# パラメーターが辞書の場合、プレースホルダーは%(名前)sで指定する。
c.execute('INSERT INTO `cities` VALUES (%(rank)s, %(city)s, %(population)s)',
{'rank': 2, 'city': '神奈川', 'population': 9200166})
# executemany()メソッドでは、複数のパラメーターをリストで指定できる。
# パラメーターの数(ここでは3つ)のSQLを順に実行できる。
c.executemany('INSERT INTO `cities` VALUES (%(rank)s, %(city)s, %(population)s)', [
{'rank':3, 'city': '大阪', 'population': 8823453},
{'rank':4, 'city': '愛知', 'population': 7552873},
{'rank':5, 'city': '埼玉', 'population': 7337330},
])
# 変更をコミット(保存)する。
conn.commit()
c.execute('SELECT * FROM cities') # 保存したデータを取得するSELECT文を実行する。
for row in c.fetchall(): # クエリの結果はfetchall()メソッドで取得できる。
print(row) # 保存したデータを表示する
conn.close() # コネクションを閉じる。
コードが書けたので動かしてみます。
$python sample.py
うまくいけば下記コマンドがprintされます。
(1, '東京', 13982622)
(2, '神奈川', 9200166)
(3, '大阪', 8823453)
(4, '愛知', 7552873)
(5, '埼玉', 7337330)
以上で上手く保存もされ、pythonファイルで操作もすることができました。
スクールを利用して本格的に学ぶ
いかがでしたでしょうか?
10人中9人が挫折すると言われるプログラミングを、ヒロヤンも実はプログラミングスクールで学習をしてきたからで、結果、今はPythonエンジニアとして働いています。
挫折率が高いプログラミングこそお金を払ってメンターを付けて、道を見失わないように環境を構築する必要があるのではないでしょうか。
これはダイエットで自分一人では痩せられないけど、トレーナーを付けて否が応でもせざるを得ない環境を作ると一緒ですね。
ヒロヤンもプログラミング勉強開始直後はあれこれ悩みましたが、悩むよりも手っ取り早くスクールに登録した方が最短ルートで勉強できるのではないかと考え、結果挫折せずに今に至っています。
今なら無料でキャリアカウンセリングを行っているCodeCamp(コードキャンプ)のようなプログラミングスクールもありますのでこれを機会に是非カウンセリングだけでも受けてみてはいかがでしょうか?ショートコードショートコード
上記リンク先から無料相談ができます。ショートコード
またこちら(↓)ではPython専用のプログラミングスクールをまとめ紹介しています。




コメントを残す