Python(14)Python操作MySQLデータベースを学習して添削・変更操作を行う


目次
  • Python(14)Python操作MySQLデータベースを学習して添削改変操作
  • を行う
  • 1.MySQL
  • への接続
  • 2.挿入データ
  • 三.削除データ
  • 4.更新データ
  • 5.データベースおよびテーブル
  • の作成
  • 6.クエリデータ
  • 7.練習
  • 1テーブルを作成し、データ
  • を追加
  • 2部門を追加
  • 3部門を削除
  • 4. 部門
  • を更新
  • 5. 全部門を問い合わせる
  • 6ページング従業員情報


  • Python(14)Python操作MySQLデータベースを学習して添削・変更操作を行う
    一.MySQLへの接続
    まず、パッケージが必要です.import pymysql接続でデータベース操作を行うには3ステップかかります.
  • 接続mysql
  • カーソル
  • を作成する
  • 操作データベース
  • クエリー結果
  • を取得
  • 切断
  • 接続データベース:
    #   MySQL  6   :   ,   ,
    					#   ,  ,
    					#     ,   
    #    
    con = pymysql.connect(
        host='localhost', port=3306,
        user='root', password='root',
        database='mydb2', charset='utf8')
    #    
    con = pymysql.connect('127.0.0.1', 'root', 'root', 'mydb2')  
    

    カーソルオブジェクトの作成:sql文を実行できます
    cursor = con.cursor()
    

    SQLの実行
    sql = 'select * from star'
    cursor.execute(sql)  #   SQL
    

    クエリー結果の取得
    res = cursor.fetchall()
    print(res)
    

    接続を閉じる
    #       
    cursor.close()
    #   mysql   
    con.close()
    

    二.データの挿入
    import pymysql
    
    conn = pymysql.connect('localhost', 'root', 'root', 'mydb2')
    cursor = conn.cursor()
    
    #     
    sql = 'insert into person(name, age) values("aa", 20)'
    
    try:
        cursor.execute(sql)
        #     
        conn.commit()
    except:
        #   
        conn.rollback()
    
    cursor.close()
    conn.close()
    

    三.データの削除
    import pymysql
    
    conn = pymysql.connect('localhost', 'root', 'root', 'mydb2')
    cursor = conn.cursor()
    
    #     
    sql = 'delete from person where id=18'
    
    try:
        cursor.execute(sql)
        #     
        conn.commit()
    except:
        #   
        conn.rollback()
    
    cursor.close()
    conn.close()
    

    四.データの更新
    import pymysql
    
    conn = pymysql.connect('localhost', 'root', 'root', 'mydb2')
    cursor = conn.cursor()
    
    #     
    sql = 'update person set age=30 where id=20'
    
    try:
        cursor.execute(sql)
        #     
        conn.commit()
    except:
        #   
        conn.rollback()
    
    cursor.close()
    conn.close()
    

    五.データベースとテーブルの作成
    #      
    	cursor.execute('create database mydb4 charset=utf8')
    #    
        sql = '''
            create table user (
                id int primary key auto_increment,
                name varchar(30)
            )
        '''
        cursor.execute(sql)
    

    六.データの問合せ
    import pymysql
    from pymysql.cursors import DictCursor
    
    
    db = pymysql.connect('localhost', 'root', 'root', 'mydb2')
    
    with db.cursor(cursor=DictCursor) as cursor:
        #      sql  
        cursor.execute('select * from student')
    
        #       
        # res = cursor.fetchall()  #       
        # res = cursor.fetchone()  #          
        # res = cursor.fetchone()  #          
        res = cursor.fetchmany(3)  #     3   
       
        print(res)
        # (('1001', 'zhangsan'), ('1002', 'xiaoming'), ('1003', 'jack'), ('1004', 'tom'), ('1005', 'jerry'), ('1006', 'lucy'))
    
        #   DictCursor    .
        # [{'stuid': '1004', 'stuname': 'tom'}, {'stuid': '1005', 'stuname': 'jerry'}, {'stuid': '1006', 'stuname': 'lucy'}]
    
    
    db.close()
    

    七.練習する
    1テーブルを作成し、データを追加
    create table tb_dept
    (
    	dno   int not null comment '  ',
    	dname varchar(10) not null comment '  ',
    	dloc  varchar(20) not null comment '   ',
    	primary key (dno)
    );
    
    insert into tb_dept values 
    	(10, '   ', '  '),
    	(20, '   ', '  '),
    	(30, '   ', '  '),
    	(40, '   ', '  ');
    
    create table tb_emp
    (
    	eno   int not null comment '    ',
    	ename varchar(20) not null comment '    ',
    	job   varchar(20) not null comment '    ',
    	mgr   int comment '    ',
    	sal   int not null comment '    ',
    	comm  int comment '    ',
    	dno   int comment '      ',
    	primary key (eno)
    );
    
    alter table tb_emp add constraint fk_emp_dno foreign key (dno) references tb_dept (dno);
    
    insert into tb_emp values 
    	(7800, '   ', '  ', null, 9000, 1200, 20),
    	(2056, '  ', '   ', 7800, 5000, 1500, 20),
    	(3088, '   ', '   ', 2056, 3500, 800, 20),
    	(3211, '   ', '   ', 2056, 3200, null, 20),
    	(3233, '   ', '   ', 2056, 3400, null, 20),
    	(3251, '   ', '   ', 2056, 4000, null, 20),
    	(5566, '   ', '   ', 7800, 4000, 1000, 10),
    	(5234, '  ', '  ', 5566, 2000, null, 10),
    	(3344, '  ', '    ', 7800, 3000, 800, 30),
    	(1359, '   ', '   ', 3344, 1800, 200, 30),
    	(4466, '   ', '   ', 3344, 2500, null, 30),
    	(3244, '   ', '   ', 3088, 3200, null, 20),
    	(3577, '  ', '  ', 5566, 2200, null, 10),
    	(3588, '   ', '  ', 5566, 2500, null, 10);
    

    2部門を追加
    import pymysql
    
    def main():
        no = int(input('  : '))
        name = input('  : ')
        loc = input('   : ')
        
        # 1.          
        con = pymysql.connect(host='localhost', port=3306,
                              database='hrs', charset='utf8',
                              user='yourname', password='yourpass')
        try:
            # 2.           
            with con.cursor() as cursor:
                # 3.       SQL       
                result = cursor.execute(
                    'insert into tb_dept values (%s, %s, %s)',
                    (no, name, loc)
                )
            if result == 1:
                print('    !')
            # 4.         
            con.commit()
        except:
        	#   
        	conn.rollback()
    
        finally:
            # 5.         
            con.close()
    
    if __name__ == '__main__':
        main()
    

    3部門を削除
    import pymysql
    
    def main():
        no = int(input('  : '))
        con = pymysql.connect(host='localhost', port=3306,
                              database='hrs', charset='utf8',
                              user='yourname', password='yourpass',
                              autocommit=True)
        try:
            with con.cursor() as cursor:
                result = cursor.execute(
                    'delete from tb_dept where dno=%s',
                    (no, )
                )
            if result == 1:
                print('    !')
        finally:
            con.close()
    
    if __name__ == '__main__':
        main()
    

    4.部門の更新
    import pymysql
    
    def main():
        no = int(input('  : '))
        name = input('  : ')
        loc = input('   : ')
        con = pymysql.connect(host='localhost', port=3306,
                              database='hrs', charset='utf8',
                              user='yourname', password='yourpass',
                              autocommit=True)
        try:
            with con.cursor() as cursor:
                result = cursor.execute(
                    'update tb_dept set dname=%s, dloc=%s where dno=%s',
                    (name, loc, no)
                )
            if result == 1:
                print('    !')
        finally:
            con.close()
    
    if __name__ == '__main__':
        main()
    

    5.すべての部門を問い合わせる
    import pymysql
    from pymysql.cursors import DictCursor
    
    def main():
        con = pymysql.connect(host='localhost', port=3306,
                              database='hrs', charset='utf8',
                              user='yourname', password='yourpass')
        try:
            with con.cursor(cursor=DictCursor) as cursor:
                cursor.execute('select dno as no, dname as name, dloc as loc from tb_dept')
                results = cursor.fetchall()
                print(results)
                print('  \t  \t\t   ')
                for dept in results:
                    print(dept['no'], end='\t')
                    print(dept['name'], end='\t')
                    print(dept['loc'])
        finally:
            con.close()
    
    if __name__ == '__main__':
        main()
    

    6ページング従業員情報の照会
    class Emp(object):
    
        def __init__(self, no, name, job, sal):
            self.no = no
            self.name = name
            self.job = job
            self.sal = sal
    
        def __str__(self):
            return f'
    :{self.no}
    :{self.name}
    :{self.job}
    :{self.sal}
    '
    def main(): page = int(input(' : ')) size = int(input(' : ')) con = pymysql.connect(host='localhost', port=3306, database='hrs', charset='utf8', user='yourname', password='yourpass') try: with con.cursor() as cursor: cursor.execute( 'select eno, ename, job, sal from tb_emp limit %s,%s', ((page - 1) * size, size) ) results = cursor.fetchall() for emp_tuple in results: emp = Emp(*emp_tuple) print(emp) finally: con.close() if __name__ == '__main__': main()