Python 3--PyMySQLドライバMySQLデータベース接続

8016 ワード

PyMySQLとは?
PyMySQLはPython 3.xバージョンでMySQLサーバに接続するためのライブラリで、Python 2ではmysqldbを使用します.
PyMySQLはPythonデータベースAPI v 2.0仕様に従い、pure-Python MySQLクライアントライブラリを含む.
PyMySQLインストール
PyMySQLを使用する前に、PyMySQLがインストールされていることを確認する必要があります.
PyMySQLダウンロードアドレス:https://github.com/PyMySQL/PyMySQL.
Windowsシステムは直接上のリンクを通じてフォルダに解凍してコンソールで命令を使用します
注意:コンソール(cmd)で解凍ファイルディレクトリに入る必要があります.このディレクトリにはsetup.pyというファイルが表示されます.
python setup.py install

まだインストールされていない場合は、次のコマンドを使用して最新版のPyMySQLをインストールできます.
$ pip3 install PyMySQL

システムがpipコマンドをサポートしていない場合は、以下の方法でインストールできます.
1、gitコマンドを使用してインストールパッケージのインストールをダウンロードします(手動でダウンロードすることもできます):
$ git clone https://github.com/PyMySQL/PyMySQL
$ cd PyMySQL/
$ python3 setup.py install

2、バージョン番号を設定する必要がある場合は、curlコマンドを使用してインストールできます.
$ # X.X   PyMySQL     
$ curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz
$ cd PyMySQL*
$ python3 setup.py install
$ #         PyMySQL*   

注意:上記のモジュールをインストールするroot権限があることを確認してください.
インストール中に「ImportError:No module named setuptools」というエラーメッセージが表示される可能性があります.setuptoolsをインストールしていないので、アクセスできます.https://pypi.python.org/pypi/setuptools 各システムのインストール方法を見つけます.
Linuxシステムのインストール例:
$ wget https://bootstrap.pypa.io/ez_setup.py
$ python3 ez_setup.py

データベース接続
データベースに接続する前に、次のことを確認してください.
  • データベースTEstdBを作成しました.
  • TEstdBデータベースでテーブルEMPLOYE
  • を作成しました.
  • EMPLOYE表フィールドはFIRST_NAME, LAST_NAME、AGE、SEX、INCOME.
  • 接続データベースTEstdBで使用するユーザー名は「testuser」、パスワードは「test 123」で、rootユーザー名とそのパスワードを自分で設定または直接使用することができます.Mysqlデータベースユーザーの許可はGrantコマンドを使用してください.
  • あなたのマシンにPython MySQLdbモジュールがインストールされています.

  • 例:
    次の例はMysqlのTEstdBデータベースをリンクします.
    インスタンス(Python 3.0+)
    #!/usr/bin/python3
     
    import pymysql
     
    #        
    db = pymysql.connect("localhost","testuser","test123","TESTDB" )
     
    #    cursor()            cursor
    cursor = db.cursor()
     
    #    execute()       SQL    
    cursor.execute("SELECT VERSION()")
     
    #    fetchone()         .
    data = cursor.fetchone()
     
    print ("Database version : %s " % data)
     
    #        
    db.close()
    

    以上のスクリプトを実行すると、次のように出力されます.
    Database version : 5.5.20-log
    

    データベーステーブルの作成
    データベース接続が存在する場合、execute()メソッドを使用してデータベースのテーブルを作成できます.次のようにテーブルEMPLOYEを作成します.
    インスタンス(Python 3.0+)
    #!/usr/bin/python3
     
    import pymysql
     
    #        
    db = pymysql.connect("localhost","testuser","test123","TESTDB" )
     
    #    cursor()            cursor
    cursor = db.cursor()
     
    #    execute()      SQL,        
    cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
     
    #           
    sql = """CREATE TABLE EMPLOYEE (
             FIRST_NAME  CHAR(20) NOT NULL,
             LAST_NAME  CHAR(20),
             AGE INT,  
             SEX CHAR(1),
             INCOME FLOAT )"""
     
    cursor.execute(sql)
     
    #        
    db.close()
    

    データベース挿入アクション
    次の例では、SQL INSERT文を実行してテーブルEMPLOYEにレコードを挿入します.
    インスタンス(Python 3.0+)
    #!/usr/bin/python3
     
    import pymysql
     
    #        
    db = pymysql.connect("localhost","testuser","test123","TESTDB" )
     
    #   cursor()         
    cursor = db.cursor()
     
    # SQL     
    sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
             LAST_NAME, AGE, SEX, INCOME)
             VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
    try:
       #   sql  
       cursor.execute(sql)
       #         
       db.commit()
    except:
       #          
       db.rollback()
     
    #        
    db.close()
    

    以上の例は、以下のように書くこともできる.
    インスタンス(Python 3.0+)
    #!/usr/bin/python3
     
    import pymysql
     
    #        
    db = pymysql.connect("localhost","testuser","test123","TESTDB" )
     
    #   cursor()         
    cursor = db.cursor()
     
    # SQL     
    sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
           LAST_NAME, AGE, SEX, INCOME) \
           VALUES (%s, %s,  %s,  %s,  %s )" % \
           ('Mac', 'Mohan', 20, 'M', 2000)
    try:
       #   sql  
       cursor.execute(sql)
       #   sql  
       db.commit()
    except:
       #        
       db.rollback()
     
    #        
    db.close()
    

    次のコードは、変数を使用してSQL文にパラメータを渡します.
    ..................................
    user_id = "test123"
    password = "password"
    
    con.execute('insert into Login values( %s,  %s)' % \
                 (user_id, password))
    ..................................
    

    データベース・クエリー・アクション
    PythonクエリMysqlはfetchone()メソッドを使用して単一のデータを取得し、fetchall()メソッドを使用して複数のデータを取得します.
    fetchone():このメソッドは、次のクエリー結果セットを取得します.結果セットはオブジェクトfetchall()です.すべての戻り結果行を受信します.rowcount:これは読み取り専用属性で、execute()メソッドを実行した後に影響する行数を返します.
    例:
    EMPLOYEテーブルのsalary(給与)フィールドが1000より大きいすべてのデータを問い合せます.
    インスタンス(Python 3.0+)
    #!/usr/bin/python3
     
    import pymysql
     
    #        
    db = pymysql.connect("localhost","testuser","test123","TESTDB" )
     
    #   cursor()         
    cursor = db.cursor()
     
    # SQL     
    sql = "SELECT * FROM EMPLOYEE \
           WHERE INCOME > %s" % (1000)
    try:
       #   SQL  
       cursor.execute(sql)
       #         
       results = cursor.fetchall()
       for row in results:
          fname = row[0]
          lname = row[1]
          age = row[2]
          sex = row[3]
          income = row[4]
           #     
          print ("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % \
                 (fname, lname, age, sex, income ))
    except:
       print ("Error: unable to fetch data")
     
    #        
    db.close()
    

    以上のスクリプトの実行結果は次のとおりです.
    fname=Mac, lname=Mohan, age=20, sex=M, income=2000
    

    データベース更新アクション
    更新操作はデータテーブルのデータを更新するために使用され、次の例ではTEstdBテーブルのSEXが'M'のAGE>フィールドを1インクリメントします.
    インスタンス(Python 3.0+)
    #!/usr/bin/python3
     
    import pymysql
     
    #        
    db = pymysql.connect("localhost","testuser","test123","TESTDB" )
     
    #   cursor()         
    cursor = db.cursor()
     
    # SQL     
    sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
    try:
       #   SQL  
       cursor.execute(sql)
       #         
       db.commit()
    except:
       #        
       db.rollback()
     
    #        
    db.close()
    

    アクションの削除
    削除アクションは、データテーブルのデータを削除するために使用されます.次の例では、データテーブルEMPLOYEの>AGEが20より大きいすべてのデータを削除することを示します.
    インスタンス(Python 3.0+)
    #!/usr/bin/python3
     
    import pymysql
     
    #        
    db = pymysql.connect("localhost","testuser","test123","TESTDB" )
     
    #   cursor()         
    cursor = db.cursor()
     
    # SQL     
    sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)
    try:
       #   SQL  
       cursor.execute(sql)
       #     
       db.commit()
    except:
       #        
       db.rollback()
     
    #     
    db.close()
    

    トランザクションの実行
    トランザクション・メカニズムは、データの一貫性を確保します.トランザクションには、原子性、一貫性、独立性、持続性の4つのプロパティがあります.この4つの属性は一般にACID特性と呼ばれる.
  • 原子性(atomicity).1つのトランザクションは分割できない作業単位であり、トランザクションに含まれる操作はすべて行うか、しないかのいずれかです.
  • コンシステンシ(consistency).トランザクションは、データベースを1つのコンシステンシ状態から別のコンシステンシ状態に変更する必要があります.一致性は原子性と密接に関連している.
  • 隔離性(isolation).1つのトランザクションの実行は、他のトランザクションに干渉されてはいけません.すなわち、1つのトランザクション内部の操作および使用されるデータは、同時実行される他のトランザクションから分離され、同時実行される各トランザクション間で相互に干渉することはできません.
  • 持続性(durability).持続性は永続性(permanence)とも呼ばれ、トランザクションがコミットされると、データベース内のデータの変更が永続的であるべきであることを意味します.次の他の操作や障害は、それに影響を与えるべきではありません.

  • Python DB API 2.0のトランザクションは、commitまたはrollbackの2つの方法を提供します.
    ≪インスタンス|Instance|emdw≫
    インスタンス(Python 3.0+)
    # SQL      
    sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)
    try:
       #   SQL  
       cursor.execute(sql)
       #       
       db.commit()
    except:
       #        
       db.rollback()
    

    トランザクションをサポートするデータベースの場合、Pythonデータベースのプログラミングでは、カーソルが確立されると、ステルス・データベース・トランザクションが自動的に開始されます.
    commit()メソッドカーソルのすべての更新操作、rollback()メソッドは現在のカーソルのすべての操作をロールバックします.それぞれの方法で新しいトランザクションが開始されました.テキストリンク:http://www.runoob.com/python3/python3-mysql.html