個人開発や学習等でDBを使うにあたり、無料でサーバを運用する方法をまとめました。Google ColaboratoryからGCP上のDBサーバへの接続手順になります。
DBサーバーへの接続
MySQL上で、接続用のtest_db、userを作成する
Hostに依存しないuserを作成します。
apixxxx@dbsvr:~$ sudo mysql
MariaDB [(none)]> create database test_db default charset utf8;
MariaDB [(none)]> create user 'test' identified by 'testxx';
MariaDB [(none)]> grant all on test_db.* to test;
MariaDB [(none)]> select User,Host,plugin from mysql.user;
+---------+-----------+-------------+
| User | Host | plugin |
+---------+-----------+-------------+
| root | localhost | unix_socket |
| test | % | |
| apixxxx | localhost | |
+---------+-----------+-------------+
MariaDB [(none)]> user test_db;
MariaDB [test_db]> SET PASSWORD FOR test=PASSWORD('test');
GC上で、Python 3 から MySQL に接続する
#connectorのインストール
!pip install mysql-connector-python-rf
import mysql.connector
from urllib.parse import urlparse
# サーバにconnect id:password@外部IPAdress:Port/db名
url = urlparse('mysql://test:test@35.212.172.xx:3306/test_db')
conn = mysql.connector.connect(
host = url.hostname or 'localhost',
port = url.port or 3306,
user = url.username or 'root',
password = url.password or '',
database = url.path[1:],
)
# connect check retrun=>Bool
print(conn.is_connected())
GC上で、Python 3 から MySQL に接続する
・テーブルを作成して、テストデータをinsertします。リストとタプルを利用したbulkinsertもできます。
cursor = conn.cursor()
# テーブルの作成
try:
cursor.execute("drop table test_db.users")
cursor.execute("create table test_db.users (id varchar(32), name varchar(32), email varchar(32)) ")
conn.commit()
except:
conn.rollback()
raise
# 作成したテーブルにデータを保存する
try:
cursor.execute("insert into users values(%s, %s, %s)", (1, "data1", "data1@toiara.com"))
datas = [
(2, "data2", "data2@toiara.com"),
(3, "data3", "data3@toiara.com")
]
cursor.executemany("insert into users values(%s, %s, %s)", datas)
conn.commit()
except:
conn.rollback()
raise
・クエリを実行して、SQL結果を取得し、表示します。
# list形式の結果取得の仕方
print('===== テーブル一覧 =====')
cursor.execute("show tables")
print(cursor.fetchone())
------------------------------------------------------------------------
===== テーブル一覧 =====
('users',)
------------------------------------------------------------------------
print('===== レコード削除 id=2 =====')
cursor.execute('delete from users where id=%s', (2,))
conn.commit()
------------------------------------------------------------------------
===== レコード削除 id=2 =====
------------------------------------------------------------------------
print('===== レコード一覧 list形式 =====')
cursor.execute("select * from test_db.users")
for row in cursor.fetchall():
print('id:', row[0], 'name:', row[1],'email:', row[2])
------------------------------------------------------------------------
===== レコード一覧 list形式 =====
id: 1 name: data1 email: data1@toiara.com
id: 3 name: data3 email: data3@toiara.com
------------------------------------------------------------------------
# dictionary形式の結果取得の仕方
print('===== レコード一覧 dict形式 =====')
cursor2 = conn.cursor(dictionary=True)
cursor2.execute("select * from test_db.users")
for row in cursor2.fetchall():
print('id:', row['id'], 'name:', row['name'],'email:', row['email'])
------------------------------------------------------------------------
===== レコード一覧 dict形式 =====
id: 1 name: data1 email: data1@toiara.com
id: 3 name: data3 email: data3@toiara.com
------------------------------------------------------------------------