こんばんは。きわさです。
今回はpythonでデータベースにアクセスする方法です。
mysql-connector-pythonインストール
下記コマンドでmysql-connector-pythonを取得します。
pip install mysql-connector-python
データベース作成
以降はpythonです。
DBを作成してみます。
import mysql.connector con = mysql.connector.connect( host = "hostname", user = "username", passwd = "password", charset = "utf8" ) cursor = con.cursor() cursor.execute("CREATE DATABASE test_db") cursor.close() con.close()
mysql.connector.connectの引数でDBのホスト名やユーザー名、パスワードを渡します。
cursor.executeでクエリを実行します。
上記では test_db というデータベースを作成しました。
テーブル作成
次にテーブルを作成します。
import mysql.connector con = mysql.connector.connect( host = "hostname", db = "test_db", user = "username", passwd = "password", charset = "utf8" ) cursor = con.cursor() cursor.execute("CREATE TABLE test_tbl (" "id int PRIMARY KEY AUTO_INCREMENT," "name varchar(10) NOT NULL," "price int NOT NULL" ")") cursor.close() con.close()
connectの引数で、先ほど作成したデータベース名も指定します。
cursor.executeでは、test_tbl というテーブルを作成します。
カラムは id 、name 、price の3つです。
データ挿入
作成したテーブルにデータを挿入してみます。
con = mysql.connector.connect( host = "hostname", db = "test_db", user = "username", passwd = "password", charset = "utf8" ) cursor = con.cursor() try: cursor.execute("INSERT INTO `test_tbl` (`name`, `price`) VALUES ('A', 100)") cursor.execute("INSERT INTO `test_tbl` (`name`, `price`) VALUES ('B', 200)") cursor.execute("INSERT INTO `test_tbl` (`name`, `price`) VALUES (%s, %s)", ('C', 300)) cursor.execute("INSERT INTO `test_tbl` (`name`, `price`) VALUES (%(name)s, %(price)s)", { 'name': 'D', 'price': 150 }) cursor.executemany("INSERT INTO `test_tbl` (`name`, `price`) VALUES (%s, %s)", [('E', 250), ('F', 400)]) cursor.executemany("INSERT INTO `test_tbl` (`name`, `price`) VALUES (%(name)s, %(price)s)", [{ 'name': 'G', 'price': 350 },{ 'name': 'H', 'price': 150 }]) con.commit() except Execption as e: con.rollback() print(e) finally: cursor.close() con.close()
name と price にデータを挿入しています。id はオートインクリメントなので省いています。
cursor.executeの2つめの引数にタプルや辞書を渡してやることもできます。
また、複数データまとめて挿入したい場合はcursor.executemanyを使用します。
データ読み出し
テーブルのデータは以下のように登録されました。
id | name | price |
---|---|---|
1 | A | 100 |
2 | B | 200 |
3 | C | 300 |
4 | D | 150 |
5 | E | 250 |
6 | F | 400 |
7 | G | 350 |
8 | H | 150 |
読み出してみます。
con = mysql.connector.connect( host = "hostname", db = "test_db", user = "username", passwd = "password", charset = "utf8" ) cursor = con.cursor() try: cursor.execute("SELECT * FROM `test_tbl`") rows = cursor.fetchall() for row in rows: print(row) finally: cursor.close() con.close()
cursor.executeでクエリ実行し、
cursor.fetchallで結果を取得しています。
printの出力は以下のようになります。
(1, ‘A’, 100)
(2, ‘B’, 200)
(3, ‘C’, 300)
(4, ‘D’, 150)
(5, ‘E’, 250)
(6, ‘F’, 400)
(7, ‘G’, 350)
(8, ‘H’, 150)
以上で、データベースの作成、データの挿入、読み出しができました。