mysqlデータベースをPythonから操作する簡単なクラス(例)を作成してみました。
前提条件として、
・mysql をインストールしておく
・Pythonで以下のライブラリをインストールしておく
mysql, mysql-connector, mysql-connector-python, mysqlclient
注意として
Pythonファイルを、mysql.pyとしてしまうとプログラムが動かないことがあります。
サンプルファイルは、main.pyとしています。
DBクラスのインスタンスを作成すると、初期化にてデータベースへのコネクションやカーソルが作成されます。
DB操作を完了して、メモリから削除(del)するときに、DBのクローズ処理を行うようにしています。
DB操作を行うクラス
import mysql.connector
import mysql
class dao_mysql(object):
def __init__(self, database_name, hostname='127.0.0.1', user='root'):
self._hostname = hostname
self._user = user
self._database_name = database_name
self._conn = None
self._curs = None
self._create_database()
self._conn_db()
def __del__(self):
self._close_db()
print('clear dao_mysql instance')
def __str__(self):
print('check print')
print('hostname ', self._hostname)
print('user name', self._user)
print('database ', self._database_name)
return ''
def _conn_db(self):
self._conn = mysql.connector.connect(host=self._hostname,
user=self._user,
database=self._database_name)
self._curs = self._conn.cursor()
def _close_db(self):
self._curs.close()
self._conn.close()
print('--- close ' + self._database_name + ' database ---')
def _create_database(self):
self._conn = mysql.connector.connect(host=self._hostname,
user=self._user)
self._curs = self._conn.cursor()
self._curs.execute(
'CREATE DATABASE IF NOT EXISTS ' + self._database_name
)
self._conn.commit()
self._curs.close()
self._conn.close()
def create_table(self, table_name):
self._curs.execute(
'CREATE TABLE IF NOT EXISTS ' + table_name + '('
'id int NOT NULL AUTO_INCREMENT,'
'name varchar(14) NOT NULL,'
'PRIMARY KEY(id))')
self._conn.commit()
print('* createv' + table_name + ' talbe ')
def insert_name(self, table_name, name):
self._curs.execute('INSERT INTO ' + table_name + '(name) values("' + name + '")')
self._conn.commit()
print('* insert data ')
def update_name(self, table_name, new_name, pre_name):
self._curs.execute('UPDATE '+ table_name +' set name = "' + new_name + '" WHERE name = "' + pre_name + '"')
self._conn.commit()
print('* update data')
def delete_name(self, table_name, name):
self._curs.execute('DELETE FROM ' + table_name + ' WHERE name = "' + name + '"')
self._conn.commit()
print('* delete data')
def select_all(self, table_name):
self._curs.execute('SELECT * FROM ' + table_name)
for row in self._curs:
print(row)
このクラスの実行例
if __name__ == '__main__':
database_name = 'test_mysql_db1'
table_name = 'persons'
db = dao_mysql(database_name)
print(db)
# crate table
db.create_table(table_name)
# test insert
test_flg = False
if test_flg:
user_names = ['Taro', 'Jiro', 'Takuya', 'Mike']
for user in user_names:
db.insert_name(table_name, user)
# test update
test_flg = False
if test_flg:
db.select_all(table_name)
print('-update-')
db.update_name(table_name, new_name='Michel', pre_name='Mike')
# test delete
test_flg = True
if test_flg:
db.select_all(table_name)
print('-delete-')
db.delete_name(table_name, 'Michel')
# select
db.select_all(table_name)
del db
APPENDIX: コンソールからDBが作成されていることを確認する。
#まずは、mysqlのサービスを起動しておこう(pythonコード実行前にやっておこう)
lesson % brew services start mysql
==> Successfully started `mysql` (label: homebrew.mxcl.mysql)
#では、rootでmysqlにアクセスする
lesson % mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.31 Homebrew
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
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.
# show databaseにて、pythonで作成した「test_mysql_db1」
# があることを確認する
mysql> show databases;
+---------------------+
| Database |
+---------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test_mysql_db1 |
+---------------------+
5 rows in set (0.00 sec)