sql >> データベース >  >> RDS >> Mysql

MySQLコネクタとPyMySQLの例を使用したPythonConnectto MySQL Database

    PythonコードでMySQLデータベースに接続する場合は、 mysql-connector-pythonの両方を使用できます。 MySQLドライバーとPyMySQL mysql-connector-python MySQLドライバーは、MySQLサーバーの組み込みドライバーであり、 PyMySQL はサードパーティのライブラリです。

    2つのMySQLpythonライブラリはすべて、MySQLデータベース接続を取得し、挿入、削除、更新を実行し、SQLコマンドを選択するためのクラスを提供します。また、トランザクション管理もサポートしています。この記事では、 mysql-connector-pythonの使用方法の例を示します。 およびPyMySQL MySQLデータベーステーブルを操作します。

    1。 mysql-connector-pythonを使用してMySQLデータベースを操作する方法。

    1.1mysql-connector-pythonライブラリをインストールします。

    1. mysql-connector-python MySQLデータベースをインストールすると、ライブラリをインストールできます。
    2. したがって、コマンドpip show mysql-connector-pythonを実行できます。 インストールされているかどうかを確認します。
      $pip show mysql-connector-python警告:パッケージが見つかりません:mysql-connector-python 
    3. mysql-connector-pythonの場合 ライブラリがインストールされていない場合は、コマンドpip install mysql-connector-pythonを実行できます
       $ pip install mysql-connector-pythonCollecting mysql-connector-python Downloading mysql_connector_python-8.0.25-py2.py3-none-any.whl(319 kB)|█████████ ███████████████████████| 319 kB 219 kB/sprotobufの収集>=3.0.0protobufのダウンロード-3.17.0-cp37-cp37m-macosx_10_9_x86_64.whl(959 kB)|██████████████████ ██████████████| 959 kB 727 kB / s要件はすでに満たされています:/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packagesで6> =1.9(protobuf> =3.0.0->mysql-connectorから) -python)(1.15.0)収集されたパッケージのインストール:protobuf、mysql-connector-python正常にインストールされたmysql-connector-python-8.0.25 protobuf-3.17.0 
    4. コマンドpip show mysql-connector-pythonを実行すると ここでも、インストール情報を取得できます。
       $ pip show mysql-connector-pythonName:mysql-connector-pythonVersion:8.0.25概要:Pythonで記述されたMySQLドライバーホームページ:http://dev.mysql.com/doc /connector-python/en/index.htmlAuthor:Oracleおよび/またはその関連会社Author-email:UNKNOWNライセンス:GNU GPLv2(FOSSライセンス例外あり)場所:/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7 / site-packagesRequires:protobufRequired-by:

    1.2mysql-connector-pythonを使用してMySQLデータベースに接続する手順。

    1. mysql.connectorをインポートします class。
      importmysql.connector 
    2. mysql.connector.connect()を呼び出します MySQLデータベースサーバーに接続するメソッド。
      #get mysql connection object.def open_mysql_connection(user ='jerry'、password ='jerry'、host ='127.0.0.1'、port ='3306'、database ='dev2qa_example '、use_unicode =True):conn =mysql.connector.connect(user =user、password =password、host =host、port =port、database =database、use_unicode =use_unicode)return conn 

    1.3DDLステートメントを実行してテーブルを作成します。

    1. MySQLデータベースカーソルを取得します。
      cursor=conn.cursor()
    2. DDLステートメントを実行します。一度に複数のDDLステートメントを実行する場合は、各DDLステートメントをセミコロンで区切る必要があり、 multi =Trueを追加する必要があります。
      カーソルオブジェクトのexecute()へのパラメータ それ以外の場合は、エラー mysql.connector.errors.InterfaceError:複数のステートメントを実行するときにmulti=Trueを使用をスローします。 。

       def execute_ddl(conn):cursor =conn.cursor()#以下のDDLは、存在する場合は最初にテーブルをドロップし、次にテーブルを作成します。 ddl_sql ='''DROP TABLE user_account; CREATE TABLE `dev2qa_example`.`user_account`(` id` INT NOT NULL AUTO_INCREMENT、 `user_name` VARCHAR(45)NULL、` password` VARCHAR(45)NULL、 `email` VARCHAR(45)NULL、PRIMARY KEY(` id `)); '''#上記のDDLには2つのステートメント(drop、create)が含まれているため、エラーを回避するためにmulti =Trueパラメーターを追加する必要があります。mysql.connector.errors.InterfaceError:複数のステートメントを実行する場合はmulti=Trueを使用します。 cursor.execute(ddl_sql、multi =True)cursor.close()conn.close()print(ddl_sql +'正常に実行されます。')

    1.4 DML(Insert、Update、Delete)ステートメントを実行します。

    1. MySQLデータベース接続カーソルオブジェクトを取得します。
    2. カーソルオブジェクトのexecute()を使用して、挿入、更新、削除のSQLステートメントを実行します method。
      defexecute_dml(conn):cursor =conn.cursor()dml_insert ='''INSERT INTO `dev2qa_example`.`user_account` VALUES(null、%s、%s、%s); '''cursor.execute(dml_insert、(' tom'、' tom12345678'、' [email protected]'))conn.commit()cursor.close()conn.close()
    3. MySQLテーブルに複数の行を挿入する場合は、カーソルオブジェクトのexecutemany()を実行できます。 method。
      defexecute_dml_insert_many(conn):cursor =conn.cursor()dml_insert ='''INSERT INTO `dev2qa_example`.`user_account` VALUES(null、%s、%s、%s); '''row_tuple =((' richard'、' richard'、' [email protected]')、(' trump'、' trump'、' [email protected]')、(' doctor'、' doctor ' 、'[email protected]'))cursor.executemany(dml_insert、row_tuple)conn.commit()cursor.close()conn.close()

    1.5 DMLSelectSQLステートメントを実行します。

    1. カーソルオブジェクトのexecute()を実行します selectSQLステートメントを実行するメソッド。
      defexecute_dml_select(conn):cursor =conn.cursor()dml_select ='SELECT * FROM dev2qa_example.user_account;' cursor.execute(dml_select)#行ヘッダーを出力します。 cursor.descriptionのcolの場合:print(col [0]、end ='\ t')print('\ n ------------------------ -----')#各行データを出力します。カーソル内の行の場合:print(row)print(row [1] +'--->' + row [2])cursor.close()conn.close()

    2。 PtMySQLを使用してMySQLデータベースを操作する方法。

    2.1PyMySQLをインストールします。

    1. PyMySQLを使用する前に、まずPyMySQLをインストールする必要があります。以下のようにpipを使用してインストールできます。
      $pip3 install PyMySQL 
    2. pip3 showを実行できます PyMySQLのインストールを確認するコマンド。
      $pip3 show PyMySQL 

    2.2PyMySQLを使用してMySQLデータベースを接続および操作します。

    以下は、PythonコードでPyMySQLライブラリを使用する手順です。

    1. PyMSQLをインポートする接続カーソル class。
      frompymysql import connect、cursors 
    2. 接続に電話する MySQLデータベース接続オブジェクトを取得するメソッド。
      conn=connect(host =host、user =user、password =password、db =db、charset =charset、cursorclass =cursorclass)
    3. 接続オブジェクトのcursor()関数でデータベースカーソルオブジェクトを取得します。
       conn.cursor()をカーソルとして:
    4. カーソルオブジェクトを使用してSQLステートメントを実行します。
      cursor.execute(sql)
    5. sqlステートメントがselectステートメントの場合は、カーソルオブジェクトのfetchall()またはfetchone()メソッドを呼び出して、sqlの実行結果を取得します。 fetchall()を呼び出した後、カーソルは結果の最後の行に移動するため、fetchall()メソッドを再度呼び出すと、行は返されません。
       row =cursor.fetchall()orrow =cursor .fetchone()
    6. sqlステートメントがinsert、update、deleteステートメントの場合は、接続オブジェクトのcommit()関数を呼び出して、MySQLデータベースへの変更をコミットして有効にします。
       conn.commit()
    7. データベースリソースを解放するために、最後にMySQLデータベース接続オブジェクトを閉じることを忘れないでください。
       connがNoneでない場合:conn.close()conn =None 

    2.3 PyMySQLOperateMySQLデータベースの例。

    1. この例では、MySQLデータベース名は dev2qa_exampleです。 、テーブル名は user_account 。テーブルには、 idの4つの列があります 、 user_name パスワード、 およびメール 。 id列は自動インクリメントされます。
    2. pythonソースコードには、以下のようなユーザーアカウントデータを挿入、更新、削除、および選択するためのメソッドが含まれています。 'dev2qa_example' global_charset ='utf8' global_cursorclass =cursors.DictCursor#get mysql connection object.def open_mysql_connection(host ='127.0.0.1'、user ='jerry'、password ='jerry'、db ='dev2qa_example'、charset ='utf8'、cursorclass =cursors.DictCursor):conn =connect(host =host、user =user、password =password、db =db、charset =charset、cursorclass =cursorclass)return conn#mysql接続を閉じます。 def close_mysql_connection(conn):connがNoneでない場合:conn.close()conn =None#SQLコマンドの挿入、更新、または削除を実行します。defexecute_insert_update_delete_sql(sql、host、user、password、db、charset、cursorclass):execute_row_count =0 conn =None print('sql ='+ sql)try:if string_is_not_empty(sql):conn =open_mysql_connection(host、user、password、db、charset、cursorclass)with conn.cursor()as cursor:execute_row_count=cursor。 execute(sql)ex Exception as ex:print(ex)finally:if conn is not None:conn.commit()close_mysql_connection(conn)return execute_row_count#executeselectsqlコマンド。 def execute_select_sql(sql、host、user、password、db、charset、cursorclass):ret =list()conn =None print('sql ='+ sql)try:if string_is_not_empty(sql):conn =open_mysql_connection(host、user 、password、db、charset、cursorclass)、conn.cursor()をカーソルとして使用:row_count =cursor.execute(sql)print('select return row count ='+ str(row_count))row =cursor.fetchall()print( row)ret.append(row)exとしての例外を除く:print(ex)finally:connがNoneでない場合:close_mysql_connection(conn)return ret#データベーステーブルdev2qa_example.user_accountにユーザーアカウントを挿入します。 def insert_user_account(user_name、password、email):print('********** Begininsert_user_account。**********')if string_is_not_empty(user_name)and string_is_not_empty(password)and string_is_not_empty (メール):#最初にユーザーアカウントが存在するかどうかを確認します。 sql ="select count(id)as count from dev2qa_example.user_account where lower(user_name)='" + user_name.lower()。strip()+ "'" row_list =execute_select_sql(sql、global_host、global_user、global_password、global_db、 global_charset、global_cursorclass)account_exist =行の行の場合はFalse:行の列の場合:exist_count_number =column.get('count')if present_count_number> 0:account_exist =True if not account_exist:print('User' + user_name +'do notデータベースに存在します。データベーステーブルにユーザーアカウントを挿入します。')sql ="insert into user_account(user_name、password、email)values('" + user_name + "'、'" + password + "'、'" + email + "') "insert_row_count =execute_insert_update_delete_sql(sql、global_host、global_user、global_password、global_db、global_charset、global_cursorclass)print('Insert' + str(insert_row_count)+'行データが正常に実行されます。') else:print('ユーザーアカウントが存在し、挿入できません。')else:print('user_name、password、email can be empty。')print('**********Endinsert_user_account。** ********')#ユーザーアカウントデータを更新します。 def update_user_account(user_name、password、email):print('********** Beginupdate_user_account。**********')if string_is_not_empty(user_name):sql ="updatedev2qa_example。 user_account set password ='"+ password +"'、email ='" + email +"' where lower(user_name)='" + user_name.lower()+"' "update_row_count =execute_insert_update_delete_sql(sql、global_host、global_user、global_password 、global_db、global_charset、global_cursorclass)if update_row_count ==0:print('ユーザーアカウントが存在しません。今すぐ挿入してください。')insert_user_account(user_name、password、email)else:print('Update' + str(update_row_count)+ '行データは正常に実行されます。')else:print(' user_name can not empty。')print(' ********** End update_user_account。**********')#delete userデータベーステーブルのアカウントデータ。 def delete_user_account(user_name):print('********** Begindelete_user_account。**********')if string_is_not_empty(user_name):sql ="delete from dev2qa_example.user_account where lower (user_name)='"+ user_name.lower()+"' "delete_row_count =execute_insert_update_delete_sql(sql、global_host、global_user、global_password、global_db、global_charset、global_cursorclass)print('Delete' + str(delete_row_count)+'行データが正常に実行されました。 ')print(' ********** End delete_user_account。**********')#select sqlコマンドを実行して、user_nameでユーザーアカウントデータを取得します。 def get_user_account_by_user_name(user_name):print('********** Beginget_user_account_by_user_name。**********')sql ="select * from dev2qa_example.user_account where lower(user_name)=' "+ user_name.lower()。strip()+"'" row_list =execute_select_sql(sql、global_host、global_user、global_password、global_db、global_charset、global_cursorclass)print(' **********Endget_user_account_by_user_name。* *********')#文字列が空かどうかを確認します。defstring_is_not_empty(str):strがNoneの場合:Falseを返しますelif len(str.strip())==0:Falseを返しますelse :return Trueif __name__ =='__main __':#最初にユーザーアカウントjerryを削除します。 delete_user_account('jerry')#次に、ユーザーアカウントjerryをデータベースに挿入します。 insert_user_account('jerry'、'jerry'、'[email protected]')#ユーザーアカウントデータを表示して、挿入アクションを確認します。 get_user_account_by_user_name('jerry')#usrアカウント情報を更新します。 update_user_account('jerry'、'jerry888'、'[email protected]')#更新されたユーザーアカウント情報を再度確認します。 get_user_account_by_user_name('jerry')
    3. 以下は上記のコード実行結果です。
      **********begindelete_user_account。**********sql=dev2qa_example.user_accountから削除します。ここでlower(user_name)='jerry'1行のデータを正常に削除します。**********delete_user_accountを終了します。**********************insert_user_accountを開始します。***** ***** sql =select count(id)as count from dev2qa_example.user_account where lower(user_name)='jerry' select return row count =1 [{'count':0}]ユーザーjerryはデータベースに存在しません。ユーザーアカウントをデータベースに挿入しますtable.sql=insert into user_account(user_name、password、email)values('jerry'、'jerry'、'[email protected]')1行のデータを正常に挿入します。****** ****Endinsert_user_account。**********************Beginget_user_account_by_user_name。**********sql=select * from dev2qa_example.user_account where lower (user_name)='jerry' select return row count =1 [{'id':42、'user_name':'jerry'、'password':'jerry'、'email':'[email protected]'}] **********Endget_user_account_by_user_name。********************Beginupdate_user_account。**********sql=update dev2qa_example .user_account set password ='jerry888'、email ='[email protected]' where lower(user_name)='jerry'1行のデータを正常に更新します。**********Endupdate_user_account。**** ****************beginget_user_account_by_user_name。**********sql=select * from dev2qa_example.user_account where lower(user_name)='jerry' select return row count =1 [{'id':42、'user_name':'jerry'、'password':'jerry888'、'email ':' [email protected]'}] **********Endget_user_account_by_user_name。**********

    参考資料

    1. MacでMySqlを使用する方法

    1. サブクエリ結果でMAX()を使用するにはどうすればよいですか?

    2. 中小企業がクラウドコンピューティングからどのように利益を得ることができるか

    3. PostgreSQLで読み取り専用ユーザーを作成する方法

    4. PostgreSQLの時間のタイムスタンプの違い