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)
