KnowHow

技術的なメモを中心にまとめます。
検索にて調べることができます。

mysqlデータベースを操作するクラスサンプル

登録日 :2023/06/06 06:57
カテゴリ :Python基礎

mysqlデータベースをPythonから操作する簡単なクラス(例)を作成してみました。

前提条件として、
・mysql をインストールしておく
・Pythonで以下のライブラリをインストールしておく
mysql, mysql-connector, mysql-connector-python, mysqlclient

注意として
Pythonファイルを、mysql.pyとしてしまうとプログラムが動かないことがあります。
サンプルファイルは、main.pyとしています。

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 = ['Mike', 'Nancy', 'Jun', 'Nobu']
        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