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

PythonでMySQLストアドプロシージャを呼び出す方法

    この記事では、PythonでMySQLストアドプロシージャを呼び出す方法の例を示します。 Python mysql-connector-pythonの両方を使用します ライブラリとPythonpymysql ライブラリ。

    1。 PythonステップでMySQLストアドプロシージャを呼び出します。

    1. 以下のソースコードを使用して、2つのMySQLストアドプロシージャを作成します。
    2. MySQLストアドプロシージャ add_number 。
      USE `dev2qa_example`;
      DROP procedure IF EXISTS `add_number`;
      
      DELIMITER $$
      USE `dev2qa_example`$$
      CREATE PROCEDURE `add_number` (a int, b int, out sum int)
      BEGIN
       set sum = a + b;
      END$$
      
      DELIMITER ;
      
    3. MySQLストアドプロシージャmultiple_number
      USE `dev2qa_example`;
      DROP procedure IF EXISTS `multiple_number`;
      
      DELIMITER $$
      USE `dev2qa_example`$$
      CREATE PROCEDURE `multiple_number` (a int, b int, out sum int)
      BEGIN
       set sum = a * b;
      END$$
      
      DELIMITER ;
    4. python mysql-connector-pythonかどうかを確認します ライブラリとPythonpymysql ライブラリがPython環境にインストールされています。

      $ pip show mysql-connector-python
      Name: mysql-connector-python
      Version: 8.0.25
      Summary: MySQL driver written in Python
      Home-page: http://dev.mysql.com/doc/connector-python/en/index.html
      Author: Oracle and/or its affiliates
      Author-email: UNKNOWN
      License: GNU GPLv2 (with FOSS License Exception)
      Location: /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages
      Requires: protobuf
      Required-by: 
      
      *******************************************************************************************
      
      $ pip show pymysql
      Name: PyMySQL
      Version: 1.0.2
      Summary: Pure Python MySQL Driver
      Home-page: https://github.com/PyMySQL/PyMySQL/
      Author: yutaka.matsubara
      Author-email: [email protected]
      License: "MIT"
      Location: /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages
      Requires: 
      Required-by: 
      
    5. Python mysql-connector-pythonの場合 およびpymysql ライブラリがPython環境にインストールされていない場合は、コマンド pip install pymysqlを実行できます。 またはpipinstall mysql-connector-python それらをインストールします。
    6. MySQLストアドプロシージャを呼び出して、python mysql-connector-pythonを使用します モジュールの例のソースコード。
      import mysql.connector
      
      # get mysql connection object.
      def open_mysql_connection(user=global_user, password=global_password, host=global_host, port=global_port, database=global_db, use_unicode=True):
          conn = mysql.connector.connect(user=user, password=password, host=host, port=port, database=database, use_unicode=use_unicode)
          return conn
      
      # close mysql connection.    
      def close_mysql_connection(conn):
          if conn is not None:
              conn.close()
              conn = None
       
      # call the mysql stored procedure. 
      def call_stored_procedure(conn, stored_procedure_name):
           
          cursor = conn.cursor()
          
          out_args = cursor.callproc(stored_procedure_name, (5, 6, 0))
          
          print(out_args)
          
          print(out_args[0])
          
          print(out_args[1])
           
          print(out_args[2])
              
          conn.commit()
          
          cursor.close()
          
          
      if __name__ == '__main__':
          
          conn = open_mysql_connection()
          
          call_stored_procedure(conn, 'add_number')
          
          call_stored_procedure(conn, 'multiple_number')
          
          close_mysql_connection(conn)
    7. 以下は上記の出力例です。
      (5, 6, 11)
      5
      6
      11
      (5, 6, 30)
      5
      6
      30
      
    8. Pythonを使用する場合pymysql MySQLストアドプロシージャを呼び出すモジュール。唯一の違いは、MySQLデータベース接続オブジェクトを取得する方法です。MySQLデータベース接続オブジェクトを取得する場合は、 pymysqlを使用します。 モジュールの場合、上記の def call_stored_procedure(conn、stored_procedure_name)を呼び出すことができます: MySQLストアドプロシージャも呼び出す関数。
    9. 以下は、MySQLデータベース接続オブジェクトを取得できるソースコードです。pythonpymsqlを使用します。
      from pymysql import connect, cursors
      
      # 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
          
      # close mysql connection.    
      def close_mysql_connection(conn):
          if conn is not None:
              conn.close()

    1. オラクルはコミットされていない読み取りオプションを許可していますか?

    2. ピボットテーブルと連結列

    3. テーブルのID列の明示的な値は、列リストが使用され、IDENTITY_INSERTがONSQLServerの場合にのみ指定できます。

    4. ORA-01219:データベースが開かれていません:固定テーブル/ビューでのみクエリが許可されています