工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Python

Python - MySQL データベースへのアクセス

前のページ次のページ

データベース インターフェイスの Python 標準は、Python DB-API です。ほとんどの Python データベース インターフェイスは、この標準に準拠しています。

アプリケーションに適したデータベースを選択できます。 Python Database API は、次のような幅広いデータベース サーバーをサポートします −

利用可能な Python データベース インターフェースのリストは次のとおりです:Python データベース インターフェースと API。アクセスする必要があるデータベースごとに個別の DB API モジュールをダウンロードする必要があります。たとえば、Oracle データベースと MySQL データベースにアクセスする必要がある場合は、Oracle と MySQL データベース モジュールの両方をダウンロードする必要があります。

DB API は、可能な限り Python の構造と構文を使用してデータベースを操作するための最小限の標準を提供します。この API には以下が含まれます −

MySQL を使用してすべての概念を学習するので、MySQLdb モジュールについて話しましょう。

MySQLdb とは?

MySQLdb は、Python から MySQL データベース サーバーに接続するためのインターフェイスです。 Python Database API v2.0 を実装し、MySQL C API の上に構築されています。

MySQLdb のインストール方法

先に進む前に、マシンに MySQLdb がインストールされていることを確認してください。 Pythonスクリプトに次のように入力して実行するだけです-

#!/usr/bin/python

import MySQLdb

次の結果が生成される場合、MySQLdb モジュールがインストールされていないことを意味します −

Traceback (most recent call last):
   File "test.py", line 3, in <module>
      import MySQLdb
ImportError: No module named MySQLdb

MySQLdb モジュールをインストールするには、次のコマンドを使用します −

For Ubuntu, use the following command -
$ sudo apt-get install python-pip python-dev libmysqlclient-dev
For Fedora, use the following command -
$ sudo dnf install python python-devel mysql-devel redhat-rpm-config gcc
For Python command prompt, use the following command -
pip install MySQL-python

注意 − 上記のモジュールをインストールするには、root 権限があることを確認してください。

データベース接続

MySQL データベースに接続する前に、次のことを確認してください −

以下はMySQLデータベース「TESTDB」との接続例です

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# execute SQL query using execute() method.
cursor.execute("SELECT VERSION()")

# Fetch a single row using fetchone() method.
data = cursor.fetchone()
print "Database version : %s " % data

# disconnect from server
db.close()

このスクリプトを実行すると、Linux マシンで次の結果が生成されます。

Database version : 5.0.45

データソースとの接続が確立されると、接続オブジェクトが返され、db に保存されます。 それ以外の場合は db なしに設定されています。次に、データベース オブジェクトはカーソルの作成に使用されます このオブジェクトは、SQL クエリの実行に使用されます。最後に、出てくる前に、データベース接続が閉じられ、リソースが解放されていることを確認します。

データベース テーブルを作成しています

データベース接続が確立されると、execute を使用してデータベース テーブルにテーブルまたはレコードを作成する準備が整います。 作成されたカーソルのメソッド。

データベーステーブル EMPLOYEE を作成しましょう −

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Drop table if it already exist using execute() method.
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")

# Create table as per requirement
sql = """CREATE TABLE EMPLOYEE (
         FIRST_NAME  CHAR(20) NOT NULL,
         LAST_NAME  CHAR(20),
         AGE INT,  
         SEX CHAR(1),
         INCOME FLOAT )"""

cursor.execute(sql)

# disconnect from server
db.close()

INSERT 操作

レコードをデータベース テーブルに作成する場合に必要です。

次の例では、SQL INSERT を実行します。 EMPLOYEE テーブルにレコードを作成するステートメント −

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to INSERT a record into the database.
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
         LAST_NAME, AGE, SEX, INCOME)
         VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

上記の例は、SQL クエリを動的に作成するために次のように記述できます −

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to INSERT a record into the database.
sql = "INSERT INTO EMPLOYEE(FIRST_NAME, \
       LAST_NAME, AGE, SEX, INCOME) \
       VALUES ('%s', '%s', '%d', '%c', '%d' )" % \
       ('Mac', 'Mohan', 20, 'M', 2000)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

次のコード セグメントは、パラメーターを直接渡すことができる別の実行形式です −

..................................
user_id = "test123"
password = "password"

con.execute('insert into Login values("%s", "%s")' % \
             (user_id, password))
..................................

読み取り操作

データベースに対する READ 操作は、データベースから有用な情報を取得することを意味します。

データベース接続が確立されると、このデータベースにクエリを実行する準備が整います。 fetchone() のいずれかを使用できます 単一のレコードを取得するメソッドまたは fetchall() データベース テーブルから複数の値をフェッチするメソッド。

次の手順では、給与が 1000 を超える EMPLOYEE テーブルのすべてのレコードをクエリします −

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

sql = "SELECT * FROM EMPLOYEE \
       WHERE INCOME > '%d'" % (1000)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Fetch all the rows in a list of lists.
   results = cursor.fetchall()
   for row in results:
      fname = row[0]
      lname = row[1]
      age = row[2]
      sex = row[3]
      income = row[4]
      # Now print fetched result
      print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
             (fname, lname, age, sex, income )
except:
   print "Error: unable to fecth data"

# disconnect from server
db.close()

これにより、次の結果が生成されます-

fname=Mac, lname=Mohan, age=20, sex=M, income=2000

更新操作

UPDATE 任意のデータベースでの操作は、データベースで既に使用可能な 1 つまたは複数のレコードを更新することを意味します。

次の手順では、SEX が 'M' であるすべてのレコードを更新します。 .ここでは、すべての男性の AGE を 1 年増やします。

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to UPDATE required records
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1
                          WHERE SEX = '%c'" % ('M')
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

削除操作

データベースからいくつかのレコードを削除する場合は、DELETE 操作が必要です。以下は、AGEが20以上のEMPLOYEEからすべてのレコードを削除する手順です −

#!/usr/bin/python

import MySQLdb

# Open database connection
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )

# prepare a cursor object using cursor() method
cursor = db.cursor()

# Prepare SQL query to DELETE required records
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

# disconnect from server
db.close()

取引の実行

トランザクションは、データの一貫性を保証するメカニズムです。トランザクションには次の 4 つのプロパティがあります −

Python DB API 2.0 には、commit するための 2 つのメソッドが用意されています。 またはロールバック

トランザクションの実装方法はすでに知っています。これも同様の例です-

# Prepare SQL query to DELETE required records
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # Execute the SQL command
   cursor.execute(sql)
   # Commit your changes in the database
   db.commit()
except:
   # Rollback in case there is any error
   db.rollback()

コミット操作

コミットは、変更を確定するためにデータベースに青信号を与える操作です。この操作の後、変更を元に戻すことはできません。

commit を呼び出す簡単な例を次に示します。 メソッド。

db.commit()

ロールバック操作

1 つまたは複数の変更に満足できず、それらの変更を完全に元に戻したい場合は、rollback() を使用します メソッド。

rollback() を呼び出す簡単な例を次に示します。 メソッド。

db.rollback()

データベースを切断しています

データベース接続を切断するには、close() メソッドを使用してください。

db.close()

ユーザーが close() メソッドを使用してデータベースへの接続を閉じた場合、未処理のトランザクションは DB によってロールバックされます。ただし、DB の下位レベルの実装の詳細に依存するのではなく、コミットまたはロールバックを明示的に呼び出したほうがよいでしょう。

エラーの処理

エラーの原因はたくさんあります。いくつかの例としては、実行された SQL ステートメントの構文エラー、接続エラー、またはキャンセル済みまたは終了済みのステートメント ハンドルに対する fetch メソッドの呼び出しがあります。

DB API は、各データベース モジュールに存在しなければならないエラーの数を定義します。次の表に、これらの例外を示します。

Sr.No. 例外と説明
1

警告

致命的でない問題に使用されます。 StandardError をサブクラス化する必要があります。

2

エラー

エラーの基本クラス。 StandardError をサブクラス化する必要があります。

3

インターフェースエラー

データベース自体ではなく、データベース モジュールのエラーに使用されます。 Error をサブクラス化する必要があります。

4

データベースエラー

データベースのエラーに使用されます。 Error をサブクラス化する必要があります。

5

データエラー

データ内のエラーを参照する DatabaseError のサブクラス。

6

操作上のエラー

データベースへの接続が失われたなどのエラーを参照する DatabaseError のサブクラス。これらのエラーは通常、Python スクリプト作成者の制御の範囲外です。

7

整合性エラー

一意性制約や外部キーなど、リレーショナルの整合性を損なう状況の DatabaseError のサブクラス。

8

内部エラー

カーソルがアクティブでなくなったなど、データベース モジュール内部のエラーを参照する DatabaseError のサブクラス。

9

プログラミングエラー

不適切なテーブル名などのエラーを参照する DatabaseError のサブクラスで、安全にユーザーの責任にできる可能性があります。

10

NotSupportedError

サポートされていない機能を呼び出そうとしていることを示す DatabaseError のサブクラスです。

Python スクリプトはこれらのエラーを処理する必要がありますが、上記の例外を使用する前に、MySQLdb がその例外をサポートしていることを確認してください。 DB API 2.0 仕様を読むことで、それらについての詳細を得ることができます。


Python

  1. Python データ型
  2. Python 演算子
  3. Python pass ステートメント
  4. Python 関数の引数
  5. Python 辞書
  6. Python イテレータ
  7. Python クロージャー
  8. Python 日時
  9. Pythonスリープ()
  10. Python-概要
  11. Python-数字