python pymysqlを使用してMySQLおよびプレースホルダの問題を操作

19112 ワード

文書ディレクトリ
  • pycharm操作MySQL
  • SQL文作成(プレースホルダの適用)
  • pycharm操作MySQL
    python 3では、主にpymysqlを使用してMySQL操作を行い、基本的な操作手順を簡単に記録します.操作フローは一般的に3つのステップに分けられます.データベース接続を確立します.2.操作(クエリー、挿入、更新、削除など)3.接続を閉じてここに直接コードを貼り付けて、関数の形式で述べました:
    import pymysql
    
    
    #      
    def connect():
        conn = pymysql.connect(host='localhost',
                               port=3306,
                               user='root',
                               password='root',
                               database='njust',
                               charset='utf8')
    
        #       
        cursor = conn.cursor()
        return {"conn": conn, "cursor": cursor
    

    操作を実行する際、カーソルメソッド:cursor.Excute()はSQL操作を実行します.
    # 1、         
    def select_sql(table):
        connection = connect()
        conn, cursor = connection['conn'], connection['cursor']
        sql = "select * from %s" % table
        try:
            cursor.execute(sql)
            results = cursor.fetchall()
            print(results)
        except Exception as e:
            raise e
        finally:
            cursor.close()
            conn.close()
    
    
    #     
    def insert_sql(persons_values):
        connection = connect()
        conn, cursor = connection['conn'], connection['cursor']
    
        keys = ", ".join(persons_values.keys())
        qmark = ", ".join(["%s"] * len(persons_values))
        sql_insert = "insert into persons(%s) values (%s)" % (keys, qmark)
        print(sql_insert)
        try:
            cursor.execute(sql_insert, list(persons_values.values()))
            conn.commit()
            print("    ")
        except Exception as e:
            print(e)
            conn.rollback()
            print("    ")
        finally:
            cursor.close()
            conn.close()
    
    
    #         
    def insert_sql2(message):
        connection = connect()
        conn, cursor = connection['conn'], connection['cursor']
    
        sql_insert = "insert into persons(ID, LastName, FirstName) " \
                     "values (%(ID)s, %(LastName)s, %(FirstName)s)"
        try:
            cursor.execute(sql_insert, message)
            conn.commit()
            print("    ")
        except Exception as e:
            print(e)
            conn.rollback()
            print("    ")
        finally:
            cursor.close()
            conn.close()
    
    
    #      
    def update_sql():
        connection = connect()
        conn, cursor = connection['conn'], connection['cursor']
    
        sql_update = "update persons set birthday=%s where ID=%s"
        try:
            cursor.execute(sql_update, ('2001/7/5', 3))
            conn.commit()
            print('    ')
        except Exception as e:
            print('    ', e)
            conn.rollback()
        finally:
            cursor.close()
            conn.close()
        pass
    
    
    #     
    def delete_sql(lastname):
        connection = connect()
        conn, cursor = connection['conn'], connection['cursor']
    
        sql_delete = "delete from persons where LastName=%s"
        try:
            cursor.execute(sql_delete, lastname)
            conn.commit()
            print('    ')
        except Exception as e:
            print('    ', e)
            conn.rollback()
        finally:
            cursor.close()
            conn.close()
        pass
    

    SQL文作成(プレースホルダの適用)
    実行の鍵はSQL文の作成です.これらにはいくつかの方法があります.
  • 完全なSQL文、
  • を直接呼び出します.
    sql_select = "select * from tablename"
    cursor.execute(sql_select)
    
  • は、プレースホルダを使用してパラメータを渡す.ここでは、整数、文字列にかかわらず、プレースホルダは%sであり、引用符を付ける必要はありません.
  • sql文でプレースホルダを使用して、完全なSQL
  • を構成します.
    tabel = 'persons'
    sql = "select * from %s" % table
    cursor.execute(sql)
    
  • パラメータ代替
  • tabel = 'persons'
    sql = "select * from %s" 
    cursor.execute(sql, table)
    
    #     1  ,execute()      list  tuple  
    sql_update = "update persons set birthday=%s where ID=%s"
    cursor.execute(sql_update, ('2001/7/5', 3))
    
  • ディクショナリタイプ転送変数.ここで、プレースホルダのkeysが転送ディクショナリkeysに含まれることを保証する
  • .
    #       %s   %(  keyname)s
    sql_insert = "insert into persons(ID, LastName, FirstName) " \
                 "values (%(ID)s, %(LastName)s, %(FirstName)s)"
    message = {
        "ID": 7,
        "LastName": "Jone",
        "FirstName": "Bob",
    }    
    cursor.execute(sql_insert, message)    
    

    参照元:python 3操作MySQLデータベースPython接続MySQLデータベースsql文実行時のパラメータの問題