PyMySQLモジュールの使用

7892 ワード

クイック使用
https://github.com/PyMySQL/PyMySQL
公式チュートリアル
import pymysql.cursors

#      
connection = pymysql.connect(host='localhost',
                             user='user',
                             password='passwd',
                             db='db',
                             charset='utf8mb4',
                             cursorclass=pymysql.cursors.DictCursor)

try:
    with connection.cursor() as cursor:
        #       
        sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"
        cursor.execute(sql, ('[email protected]', 'very-secret'))

    connection.commit()

    with connection.cursor() as cursor:
        #     
        sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s"
        cursor.execute(sql, ('[email protected]',))
        result = cursor.fetchone()
        print(result)
finally:
    connection.close()

調査に備える
#     SQL       ,              
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

#   sql  
cursor.execute(sql, (username, pwd))

#     
conn.commit()

#         
ret = cursor.fetchone()

#       
ret = cursor.fetchall()

#   
conn.rollback() 

きほんしよう
#     
import pymysql

username = input("      : ")
pwd = input("     : ")

#      
conn = pymysql.connect(host="localhost",
                       port=3306,
                       database="userinfo",
                       user='root',
                       password="123456",
                       charset="utf8"
                       )

#     SQL       
cursor = conn.cursor()

#       SQL  
sql = "select * from info WHERE username=%s and password=%s;"

#   sql  , pymysql     SQL  
cursor.execute(sql, (username, pwd))

#       
cursor.close()

#        
conn.close()

辞書形式のデータを返す
#     SQL       ,              
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

追加削除変更操作
増加
import pymysql

#       
username = input("      : ")
pwd = input("     : ")

#      
conn = pymysql.connect(host="localhost",
                       port=3306,
                       database="userinfo",
                       user='root',
                       password="123456",
                       charset="utf8"
                       )

#     SQL       
cursor = conn.cursor()

# sql  
sql = "insert into info (username, password) VALUES (%s, %s);"

#   sql  
cursor.execute(sql, [username, pwd])

#   
conn.commit()

#          
cursor.close()
conn.close()

データ挿入に失敗したロールバック削除操作を実行する場合、前の操作をコミットしたくない場合はrollback()ロールバックを使用してキャンセル操作をロールバックできます.
import pymysql

#       
username = input("      : ")
pwd = input("     : ")

#      
conn = pymysql.connect(host="localhost",
                       port=3306,
                       database="userinfo",
                       user='root',
                       password="123456",
                       charset="utf8"
                       )

#     SQL       
cursor = conn.cursor()

#   sql  
sql = "insert into info (username, password) VALUES (%s, %s);"

#   sql  
#  pymysql     SQL  (                ,           )

try:
    cursor.execute(sql, [username, pwd])
    #   
    conn.commit()
except Exception as e:
    print("   :", str(e))
    conn.rollback() #   

#          
cursor.close()
conn.close()

挿入されたデータのIDを取得します(関連操作で使用されます)
import pymysql

#       
username = input("      : ")
pwd = input("     : ")

#      
conn = pymysql.connect(host="localhost",
                       port=3306,
                       database="userinfo",
                       user='root',
                       password="123456",
                       charset="utf8"
                       )

#     SQL       
cursor = conn.cursor()

#   sql  
sql = "insert into info (username, password) VALUES (%s,%s);"

#   sql  
cursor.execute(sql, [username, pwd])

#   
conn.commit()

#     ,         ID
last_id = cursor.lastrowid

#          
cursor.close()
conn.close()

一括実行
import pymysql

#      
conn = pymysql.connect(host="localhost",
                       port=3306,
                       database="userinfo",
                       user='root',
                       password="123456",
                       charset="utf8"
                       )

#       
cursor = conn.cursor()

data = [("   ", 123456), ("   ", 123456), ("  ", 123456)]

# sql  
sql = "insert into info(username, password) VALUES (%s, %s)"

#     
cursor.executemany(sql, data)

#   
conn.commit()

#          
cursor.close()
conn.close()

削除
import pymysql

#      
conn = pymysql.connect(host="localhost",
                       port=3306,
                       database="userinfo",
                       user='root',
                       password="123456",
                       charset="utf8"
                       )

#       
cursor = conn.cursor()

# sql  
sql = "delete from info where id=%s"

#   SQL  
cursor.execute(sql, [1])

#     
conn.commit()

#          
cursor.close()
conn.close()

改める
import pymysql

#      
conn = pymysql.connect(host="localhost",
                       port=3306,
                       database="userinfo",
                       user='root',
                       password="123456",
                       charset="utf8"
                       )

#     SQL       
cursor = conn.cursor()

# sql  
sql = "update info set password=%s where id=%s"

password = "654321"
id = 2

cursor.execute(sql, [password, id])
conn.commit()

cursor.close()
conn.close()

調べる
単一データの問合せ
import pymysql

#      
conn = pymysql.connect(host="localhost",
                       port=3306,
                       database="userinfo",
                       user='root',
                       password="123456",
                       charset="utf8"
                       )

#     SQL       ,              
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

sql = "select * from info"

#     
cursor.execute(sql)

#         
ret = cursor.fetchone()

#       
ret = cursor.fetchall() 

#        
cursor.close()
conn.close()

ステップアップ法
クエリー後にカーソルが移動し、次回のクエリーでは前回クエリーしたデータの後に新しいクエリーが開始されます
#            
cursor.fetchmany(3)

#          1
cursor.scroll(1, mode="absolute")

#         (    )  1
cursor.scroll(1, mode="relative")

エラー処理
異常
説明
Warning
重大な警告がある場合にトリガーされます.たとえば、挿入データが切断されているなどです.
Error
警告以外のすべてのエラークラス.
InterfaceError
データベースインタフェースモジュール自体のエラー(データベースのエラーではなく)が発生した場合にトリガーされます.
DatabaseError
データベースに関連するエラーが発生するとトリガーされます.
DataError
データ処理時のエラーが発生した場合にトリガーされます.たとえば、ゼロエラーの除去、データオーバーレンジなどです.
OperationalError
ユーザー制御ではなく、データベースの操作中に発生したエラーを指します.たとえば、接続が予期せぬ切断、データベース名が見つからない、トランザクションが失敗した、メモリ割り当てエラーなどの操作データベースで発生したエラーです.
IntegrityError
外部キーのチェックに失敗したなど、整合性に関連するエラー.
InternalError
カーソルが無効になったり、トランザクションの同期に失敗したりするなど、データベースの内部エラー.
ProgrammingError
データテーブルが見つからなかったり、存在しなかったり、SQL文構文エラー、パラメータ数エラーなどのプログラムエラー.
NotSupportedError
エラーはサポートされていません.データベースでサポートされていない関数やAPIなどが使用されています.たとえば、接続オブジェクトで.rollback()関数を使用しますが、データベースはトランザクションをサポートしていません.または、トランザクションが閉じています.