こんばんは。きわさです。
今回は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)
以上で、データベースの作成、データの挿入、読み出しができました。
