PythonMySQL-クイックガイド
データベースインターフェイスのPython標準は、PythonDB-APIです。ほとんどのPythonデータベースインターフェイスはこの標準に準拠しています。
アプリケーションに適したデータベースを選択できます。Python Database APIは、次のような幅広いデータベースサーバーをサポートします。
- GadFly
- mSQL
- MySQL
- PostgreSQL
- Microsoft SQL Server 2000
- Informix
- Interbase
- Oracle
- Sybase
利用可能なPythonデータベースインターフェースのリストは次のとおりです-PythonデータベースインターフェースとAPI。アクセスする必要のあるデータベースごとに個別のDBAPIモジュールをダウンロードする必要があります。たとえば、MySQLデータベースだけでなくOracleデータベースにもアクセスする必要がある場合は、OracleデータベースモジュールとMySQLデータベースモジュールの両方をダウンロードする必要があります。
mysql-connector-pythonとは何ですか?
MySQL Python / Connectorは、PythonからMySQLデータベースサーバーに接続するためのインターフェイスです。PythonデータベースAPIを実装し、MySQLの上に構築されています。
mysql-connector-pythonをインストールするにはどうすればよいですか?
まず、マシンにPythonがすでにインストールされていることを確認する必要があります。これを行うには、コマンドプロンプトを開き、Pythonと入力して、Enterキーを押します。Pythonがすでにシステムにインストールされている場合、このコマンドは次のようにそのバージョンを表示します-
C:\Users\Tutorialspoint>python
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
ここで、ctrl + zを押してからEnterキーを押して、Pythonシェルを終了し、Python_MySQLという名前のフォルダー(Python-MySQLコネクターをインストールする予定のフォルダー)を作成します。
>>> ^Z
C:\Users\Tutorialspoint>d:
D:\>mkdir Python_MySQL
PIPを確認する
PIPは、Pythonのパッケージマネージャーであり、Pythonでさまざまなモジュール/パッケージをインストールできます。したがって、Mysql-python mysql-connector-pythonをインストールするには、コンピューターにPIPがインストールされており、その場所がパスに追加されていることを確認する必要があります。
これを行うには、pipコマンドを実行します。システムにPIPがない場合、またはPIPの場所をシステムに追加していない場合Path 環境変数の場合、次のようなエラーメッセージが表示されます。
D:\Python_MySQL>pip
'pip' is not recognized as an internal or external command,
operable program or batch file.
PIPをインストールするには、get-pip.pyを上記で作成したフォルダーにダウンロードし、コマンドから次のようにナビゲートしてpipをインストールします。
D:\>cd Python_MySQL
D:\Python_MySQL>python get-pip.py
Collecting pip
Downloading
https://files.pythonhosted.org/packages/8d/07/f7d7ced2f97ca3098c16565efbe6b15fafcba53e8d9bdb431e09140514b0/pip-19.2.2-py2.py3-none-any.whl (1.4MB)
|████████████████████████████████| 1.4MB 1.3MB/s
Collecting wheel
Downloading
https://files.pythonhosted.org/packages/00/83/b4a77d044e78ad1a45610eb88f745be2fd2c6d658f9798a15e384b7d57c9/wheel-0.33.6-py2.py3-none-any.whl
Installing collected packages: pip, wheel
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed pip-19.2.2 wheel-0.33.6
mysql-connector-pythonのインストール
PythonとPIPをインストールしたら、コマンドプロンプトを開き、以下に示すようにpip(オプション)をアップグレードします。
C:\Users\Tutorialspoint>python -m pip install --upgrade pip
Collecting pip
Using cached
https://files.pythonhosted.org/packages/8d/07/f7d7ced2f97ca3098c16565efbe6b15fafcba53e8d9bdb431e09140514b0/pip-19.2.2-py2.py3-none-any.whl
Installing collected packages: pip
Found existing installation: pip 19.0.3
Uninstalling pip-19.0.3:
Successfully uninstalled pip-19.0.3
Successfully installed pip-19.2.2
次に、管理者モードでコマンドプロンプトを開き、Python MySQLConnectを-としてインストールします。
C:\WINDOWS\system32>pip install mysql-connector-python
Collecting mysql-connector-python
Using cached
https://files.pythonhosted.org/packages/99/74/f41182e6b7aadc62b038b6939dce784b7f9ec4f89e2ae14f9ba8190dc9ab/mysql_connector_python-8.0.17-py2.py3-none-any.whl
Collecting protobuf>=3.0.0 (from mysql-connector-python)
Using cached
https://files.pythonhosted.org/packages/09/0e/614766ea191e649216b87d331a4179338c623e08c0cca291bcf8638730ce/protobuf-3.9.1-cp37-cp37m-win32.whl
Collecting six>=1.9 (from protobuf>=3.0.0->mysql-connector-python)
Using cached
https://files.pythonhosted.org/packages/73/fb/00a976f728d0d1fecfe898238ce23f502a721c0ac0ecfedb80e0d88c64e9/six-1.12.0-py2.py3-none-any.whl
Requirement already satisfied: setuptools in c:\program files (x86)\python37-32\lib\site-packages (from protobuf>=3.0.0->mysql-connector-python) (40.8.0)
Installing collected packages: six, protobuf, mysql-connector-python
Successfully installed mysql-connector-python-8.0.17 protobuf-3.9.1 six-1.12.0
検証
インストールを確認するには、次の行を含むサンプルpythonスクリプトを作成します。
import mysql.connector
インストールが成功した場合、それを実行すると、エラーは発生しません-
D:\Python_MySQL>python test.py
D:\Python_MySQL>
Pythonを最初からインストールする
簡単に言うと、Pythonを最初からインストールする必要がある場合です。Pythonホームページにアクセスします。
クリックしてください Downloads ボタンをクリックすると、さまざまなプラットフォーム用の最新バージョンのPythonへのリンクを提供するダウンロードページにリダイレクトされます。1つを選択してダウンロードします。
たとえば、python-3.7.4.exe(Windows用)をダウンロードしました。ダウンロードした.exeファイルをダブルクリックして、インストールプロセスを開始します。
[Python 3.7をパスに追加]オプションをオンにして、インストールを続行します。このプロセスが完了すると、Pythonがシステムにインストールされます。
MySQLに接続するには、(1つの方法は)以下に示すようにシステムでMySQLコマンドプロンプトを開きます。
ここでパスワードを要求します。インストール時にデフォルトユーザー(root)に設定したパスワードを入力する必要があります。
次に、MySQLとの接続が確立され、次のメッセージが表示されます-
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.12-log MySQL Community Server (GPL)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQLデータベースからいつでも切断できます。 exitmysql>プロンプトでのコマンド。
mysql> exit
Bye
Pythonを使用してMySQLとの接続を確立する
Pythonを使用してMySQLデータベースへの接続を確立する前に、-
mydbという名前のデータベースを作成したこと。
FIRST_NAME、LAST_NAME、AGE、SEX、およびINCOMEの列を持つテーブルEMPLOYEEを作成しました。
MySQLとの接続に使用している資格情報はユーザー名です- root、パスワード- password。
connect()コンストラクターを使用して接続を確立できます。これは、ユーザー名、パスワード、ホスト、および接続する必要のあるデータベースの名前(オプション)を受け入れ、MySQLConnectionクラスのオブジェクトを返します。
例
以下は、MySQLデータベース「mydb」に接続する例です。
import mysql.connector
#establishing the connection
conn = mysql.connector.connect(
user='root', password='password', host='127.0.0.1', database='mydb'
)
#Creating a cursor object using the cursor() method
cursor = conn.cursor()
#Executing an MYSQL function using the execute() method
cursor.execute("SELECT DATABASE()")
#Fetch a single row using fetchone() method.
data = cursor.fetchone()
print("Connection established to: ",data)
#Closing the connection
conn.close()
出力
実行すると、このスクリプトは次の出力を生成します-
D:\Python_MySQL>python EstablishCon.py
Connection established to: ('mydb',)
資格情報(ユーザー名、パスワード、ホスト名、データベース名)をに渡すことでMySQLへの接続を確立することもできます connection.MySQLConnection() 以下に示すように-
from mysql.connector import (connection)
#establishing the connection
conn = connection.MySQLConnection(
user='root', password='password', host='127.0.0.1', database='mydb'
)
#Closing the connection
conn.close()
CREATE DATABASEクエリを使用して、MYSQLでデータベースを作成できます。
構文
以下は、CREATEDATABASEクエリの構文です。
CREATE DATABASE name_of_the_database
例
次のステートメントは、MySQLでmydbという名前のデータベースを作成します-
mysql> CREATE DATABASE mydb;
Query OK, 1 row affected (0.04 sec)
SHOW DATABASESステートメントを使用してデータベースのリストを観察すると、以下に示すように、その中に新しく作成されたデータベースを観察できます。
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| logging |
| mydatabase |
| mydb |
| performance_schema |
| students |
| sys |
+--------------------+
26 rows in set (0.15 sec)
Pythonを使用してMySQLでデータベースを作成する
MySQLとの接続を確立した後、MySQL内のデータを操作するには、データベースに接続する必要があります。既存のデータベースに接続することも、独自のデータベースを作成することもできます。
MySQLデータベースを作成または削除するには、特別な権限が必要になります。したがって、rootユーザーにアクセスできる場合は、任意のデータベースを作成できます。
例
次の例では、MYSQLとの接続を確立し、その中にデータベースを作成します。
import mysql.connector
#establishing the connection
conn = mysql.connector.connect(user='root', password='password', host='127.0.0.1')
#Creating a cursor object using the cursor() method
cursor = conn.cursor()
#Doping database MYDATABASE if already exists.
cursor.execute("DROP database IF EXISTS MyDatabase")
#Preparing query to create a database
sql = "CREATE database MYDATABASE";
#Creating a database
cursor.execute(sql)
#Retrieving the list of databases
print("List of databases: ")
cursor.execute("SHOW DATABASES")
print(cursor.fetchall())
#Closing the connection
conn.close()
出力
List of databases:
[
('information_schema',),
('dbbug61332',),
('details',),
('exampledatabase',),
('mydatabase',),
('mydb',),
('mysql',),
('performance_schema',)
]
CREATE TABLEステートメントは、MYSQLデータベースにテーブルを作成するために使用されます。ここでは、テーブルの名前と、各列の定義(名前とデータ型)を指定する必要があります。
構文
以下は、MySQLでテーブルを作成するための構文です。
CREATE TABLE table_name(
column1 datatype,
column2 datatype,
column3 datatype,
.....
columnN datatype,
);
例
次のクエリは、5つの列(FIRST_NAME、LAST_NAME、AGE、SEX、およびINCOME)を持つMySQLでEMPLOYEEという名前のテーブルを作成します。
mysql> CREATE TABLE EMPLOYEE(
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT);
Query OK, 0 rows affected (0.42 sec)
DESCステートメントは、指定されたテーブルの説明を提供します。これを使用すると、以下に示すように、テーブルが作成されているかどうかを確認できます。
mysql> Desc Employee;
+------------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+-------+
| FIRST_NAME | char(20) | NO | | NULL | |
| LAST_NAME | char(20) | YES | | NULL | |
| AGE | int(11) | YES | | NULL | |
| SEX | char(1) | YES | | NULL | |
| INCOME | float | YES | | NULL | |
+------------+----------+------+-----+---------+-------+
5 rows in set (0.07 sec)
Pythonを使用してMySQLでテーブルを作成する
execute()という名前のメソッド(カーソルオブジェクトで呼び出される)は、2つの変数を受け入れます-
実行するクエリを表す文字列値。
クエリのパラメーター(プレースホルダーの値)を表す、タプル、リスト、または辞書にすることができるオプションのargsパラメーター。
クエリの影響を受ける行数を表す整数値を返します。
データベース接続が確立されたら、CREATETABLEクエリをに渡すことでテーブルを作成できます。 execute() 方法。
要するに、pythonを使用してテーブルを作成するには−
インポート mysql.connector パッケージ。
を使用して接続オブジェクトを作成します mysql.connector.connect() メソッド、ユーザー名、パスワード、ホスト(オプションのデフォルト:localhost)、およびデータベース(オプション)をパラメーターとして渡します。
を呼び出してカーソルオブジェクトを作成します cursor() 上で作成した接続オブジェクトのメソッド。
次に、CREATE TABLEステートメントをパラメーターとして、execute() 方法。
例
次の例では、という名前のテーブルを作成します Employee データベースmydb内。
import mysql.connector
#establishing the connection
conn = mysql.connector.connect(
user='root', password='password', host='127.0.0.1', database='mydb'
)
#Creating a cursor object using the cursor() method
cursor = conn.cursor()
#Dropping EMPLOYEE table if already exists.
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
#Creating 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)
#Closing the connection
conn.close()
MySQLの既存のテーブルに新しい行を追加するには、 INSERT INTOステートメント。この場合、テーブルの名前、列名、および値を(列名と同じ順序で)指定する必要があります。
構文
以下は、MySQLのINSERTINTOステートメントの構文です。
INSERT INTO TABLE_NAME (column1, column2, column3,...columnN)
VALUES (value1, value2, value3,...valueN);
例
次のクエリは、EMPLOYEEという名前のテーブルにレコードを挿入します。
INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME)
VALUES ('Mac', 'Mohan', 20, 'M', 2000);
SELECTステートメントを次のように使用して、挿入操作後にテーブルのレコードを確認できます。
mysql> select * from Employee;
+------------+-----------+------+------+--------+
| FIRST_NAME | LAST_NAME | AGE | SEX | INCOME |
+------------+-----------+------+------+--------+
| Mac | Mohan | 20| M | 2000 |
+------------+-----------+------+------+--------+
1 row in set (0.00 sec)
常に列の名前を指定する必要はありません。テーブルの列と同じ順序でレコードの値を渡すと、次のように列名なしでSELECTステートメントを実行できます。
INSERT INTO EMPLOYEE VALUES ('Mac', 'Mohan', 20, 'M', 2000);
Pythonを使用してMySQLテーブルにデータを挿入する
ザ・ execute()メソッド(カーソルオブジェクトで呼び出される)は、クエリをパラメータとして受け入れ、指定されたクエリを実行します。データを挿入するには、MySQLINSERTステートメントをパラメーターとしてデータに渡す必要があります。
cursor.execute("""INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME)
VALUES ('Mac', 'Mohan', 20, 'M', 2000)""")
Pythonを使用してMySQLのテーブルにデータを挿入するには−
インポート mysql.connector パッケージ。
を使用して接続オブジェクトを作成します mysql.connector.connect() メソッド、ユーザー名、パスワード、ホスト(オプションのデフォルト:localhost)、およびデータベース(オプション)をパラメーターとして渡します。
を呼び出してカーソルオブジェクトを作成します cursor() 上で作成した接続オブジェクトのメソッド。
次に、を実行します INSERT ステートメントをパラメーターとしてに渡すことにより、 execute() 方法。
例
次の例では、SQL INSERTステートメントを実行して、EMPLOYEEテーブルにレコードを挿入します。
import mysql.connector
#establishing the connection
conn = mysql.connector.connect(
user='root', password='password', host='127.0.0.1', database='mydb'
)
#Creating a cursor object using the cursor() method
cursor = conn.cursor()
# Preparing 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:
# Executing the SQL command
cursor.execute(sql)
# Commit your changes in the database
conn.commit()
except:
# Rolling back in case of error
conn.rollback()
# Closing the connection
conn.close()
動的に値を挿入する
使用することもできます “%s” の値の代わりに INSERT 以下に示すように、MySQLにクエリを実行し、値をリストとして渡します。
cursor.execute("""INSERT INTO EMPLOYEE VALUES ('Mac', 'Mohan', 20, 'M', 2000)""",
('Ramya', 'Ramapriya', 25, 'F', 5000))
例
次の例では、レコードをEmployeeテーブルに動的に挿入します。
import mysql.connector
#establishing the connection
conn = mysql.connector.connect(
user='root', password='password', host='127.0.0.1', database='mydb'
)
#Creating a cursor object using the cursor() method
cursor = conn.cursor()
# Preparing SQL query to INSERT a record into the database.
insert_stmt = (
"INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME)"
"VALUES (%s, %s, %s, %s, %s)"
)
data = ('Ramya', 'Ramapriya', 25, 'F', 5000)
try:
# Executing the SQL command
cursor.execute(insert_stmt, data)
# Commit your changes in the database
conn.commit()
except:
# Rolling back in case of error
conn.rollback()
print("Data inserted")
# Closing the connection
conn.close()
出力
Data inserted
SELECTクエリを使用して、MySQLのテーブルからデータを取得/フェッチできます。このクエリ/ステートメントは、指定されたテーブルの内容を表形式で返し、結果セットとして呼び出されます。
構文
SELECTクエリの構文は次のとおりです-
SELECT column1, column2, columnN FROM table_name;
例
私たちは名前でMySQLのテーブルを作成したと仮定しcricketers_dataとして-
CREATE TABLE cricketers_data(
First_Name VARCHAR(255),
Last_Name VARCHAR(255),
Date_Of_Birth date,
Place_Of_Birth VARCHAR(255),
Country VARCHAR(255)
);
そして、INSERTステートメントを-として使用して5つのレコードを挿入した場合
insert into cricketers_data values('Shikhar', 'Dhawan', DATE('1981-12-05'), 'Delhi', 'India');
insert into cricketers_data values('Jonathan', 'Trott', DATE('1981-04-22'), 'CapeTown', 'SouthAfrica');
insert into cricketers_data values('Kumara', 'Sangakkara', DATE('1977-10-27'), 'Matale', 'Srilanka');
insert into cricketers_data values('Virat', 'Kohli', DATE('1988-11-05'), 'Delhi', 'India');
insert into cricketers_data values('Rohit', 'Sharma', DATE('1987-04-30'), 'Nagpur', 'India');
次のクエリは、テーブルからFIRST_NAMEとCountryの値を取得します。
mysql> select FIRST_NAME, Country from cricketers_data;
+------------+-------------+
| FIRST_NAME | Country |
+------------+-------------+
| Shikhar | India |
| Jonathan | SouthAfrica |
| Kumara | Srilanka |
| Virat | India |
| Rohit | India |
+------------+-------------+
5 rows in set (0.00 sec)
列の名前を-として示す*を使用して、各レコードのすべての値を取得することもできます。
mysql> SELECT * from cricketers_data;
+------------+------------+---------------+----------------+-------------+
| First_Name | Last_Name | Date_Of_Birth | Place_Of_Birth | Country |
+------------+------------+---------------+----------------+-------------+
| Shikhar | Dhawan | 1981-12-05 | Delhi | India |
| Jonathan | Trott | 1981-04-22 | CapeTown | SouthAfrica |
| Kumara | Sangakkara | 1977-10-27 | Matale | Srilanka |
| Virat | Kohli | 1988-11-05 | Delhi | India |
| Rohit | Sharma | 1987-04-30 | Nagpur | India |
+------------+------------+---------------+----------------+-------------+
5 rows in set (0.00 sec)
Pythonを使用してMYSQLテーブルからデータを読み取る
任意のデータベースでのREAD操作は、データベースからいくつかの有用な情報をフェッチすることを意味します。を使用してMYSQLからデータをフェッチできますfetch() mysql-connector-pythonによって提供されるメソッド。
cursor.MySQLCursorのクラス、すなわち3つのメソッドを提供しますfetchall(), fetchmany() そして、 fetchone() どこ、
ザ・ fetchall()メソッドは、クエリの結果セット内のすべての行を取得し、それらをタプルのリストとして返します。(いくつかの行を取得した後にこれを実行すると、残りの行が返されます)。
ザ・ fetchone() メソッドは、クエリの結果の次の行をフェッチし、それをタプルとして返します。
ザ・ fetchmany() メソッドはfetchone()に似ていますが、単一の行ではなく、クエリの結果セット内の次の行のセットを取得します。
Note −結果セットは、カーソルオブジェクトを使用してテーブルをクエリしたときに返されるオブジェクトです。
rowcount −これは読み取り専用属性であり、execute()メソッドの影響を受けた行数を返します。
例
次の例では、SELECTクエリを使用してEMPLOYEEテーブルのすべての行をフェッチし、最初に取得した結果セットから、fetchone()メソッドを使用して最初の行を取得し、次にfetchall()メソッドを使用して残りの行をフェッチします。
import mysql.connector
#establishing the connection
conn = mysql.connector.connect(
user='root', password='password', host='127.0.0.1', database='mydb'
)
#Creating a cursor object using the cursor() method
cursor = conn.cursor()
#Retrieving single row
sql = '''SELECT * from EMPLOYEE'''
#Executing the query
cursor.execute(sql)
#Fetching 1st row from the table
result = cursor.fetchone();
print(result)
#Fetching 1st row from the table
result = cursor.fetchall();
print(result)
#Closing the connection
conn.close()
出力
('Krishna', 'Sharma', 19, 'M', 2000.0)
[('Raj', 'Kandukuri', 20, 'M', 7000.0), ('Ramya', 'Ramapriya', 25, 'M', 5000.0)]
次の例では、fetchmany()メソッドを使用してEMPLOYEEテーブルの最初の2行を取得します。
例
import mysql.connector
#establishing the connection
conn = mysql.connector.connect(
user='root', password='password', host='127.0.0.1', database='mydb'
)
#Creating a cursor object using the cursor() method
cursor = conn.cursor()
#Retrieving single row
sql = '''SELECT * from EMPLOYEE'''
#Executing the query
cursor.execute(sql)
#Fetching 1st row from the table
result = cursor.fetchmany(size =2);
print(result)
#Closing the connection
conn.close()
出力
[('Krishna', 'Sharma', 19, 'M', 2000.0), ('Raj', 'Kandukuri', 20, 'M', 7000.0)]
MySQLでテーブルの特定の行をフェッチ、削除、または更新する場合は、where句を使用して条件を指定し、操作のためにテーブルの行をフィルタリングする必要があります。
たとえば、where句を含むSELECTステートメントがある場合、指定された条件を満たす行のみが取得されます。
構文
以下はWHERE句の構文です-
SELECT column1, column2, columnN
FROM table_name
WHERE [condition]
例
MySQLでEMPLOYEESという名前のテーブルを作成したと仮定します。
mysql> CREATE TABLE EMPLOYEE(
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT
);
Query OK, 0 rows affected (0.36 sec)
そして、INSERTステートメントを-として使用して4つのレコードを挿入した場合
mysql> INSERT INTO EMPLOYEE VALUES
('Krishna', 'Sharma', 19, 'M', 2000),
('Raj', 'Kandukuri', 20, 'M', 7000),
('Ramya', 'Ramapriya', 25, 'F', 5000),
('Mac', 'Mohan', 26, 'M', 2000);
次のMySQLステートメントは、収入が4000を超える従業員のレコードを取得します。
mysql> SELECT * FROM EMPLOYEE WHERE INCOME > 4000;
+------------+-----------+------+------+--------+
| FIRST_NAME | LAST_NAME | AGE | SEX | INCOME |
+------------+-----------+------+------+--------+
| Raj | Kandukuri | 20| M | 7000 |
| Ramya | Ramapriya | 25| F | 5000 |
+------------+-----------+------+------+--------+
2 rows in set (0.00 sec)
Pythonを使用したWHERE句
Pythonプログラムを使用してテーブルから特定のレコードをフェッチするには-
インポート mysql.connector パッケージ。
を使用して接続オブジェクトを作成します mysql.connector.connect() メソッド、ユーザー名、パスワード、ホスト(オプションのデフォルト:localhost)、およびデータベース(オプション)をパラメーターとして渡します。
を呼び出してカーソルオブジェクトを作成します cursor() 上で作成した接続オブジェクトのメソッド。
次に、WHERE句を指定してSELECTステートメントを実行し、パラメーターとしてexecute() 方法。
例
次の例では、Employeeという名前のテーブルを作成し、データを入力します。次に、where句を使用して、年齢値が23未満のレコードを取得します。
import mysql.connector
#establishing the connection
conn = mysql.connector.connect(
user='root', password='password', host='127.0.0.1', database='mydb'
)
#Creating a cursor object using the cursor() method
cursor = conn.cursor()
#Doping EMPLOYEE table if already exists.
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
sql = '''CREATE TABLE EMPLOYEE(
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT
)'''
cursor.execute(sql)
#Populating the table
insert_stmt = "INSERT INTO EMPLOYEE (
FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES (%s, %s, %s, %s, %s
)"
data = [
('Krishna', 'Sharma', 19, 'M', 2000),
('Raj', 'Kandukuri', 20, 'M', 7000),
('Ramya', 'Ramapriya', 25, 'F', 5000),
('Mac', 'Mohan', 26, 'M', 2000)
]
cursor.executemany(insert_stmt, data)
conn.commit()
#Retrieving specific records using the where clause
cursor.execute("SELECT * from EMPLOYEE WHERE AGE <23")
print(cursor.fetchall())
#Closing the connection
conn.close()
出力
[('Krishna', 'Sharma', 19, 'M', 2000.0), ('Raj', 'Kandukuri', 20, 'M', 7000.0)]
SELECTクエリを使用してデータをフェッチしているときに、OrderBy句を使用して、結果を目的の順序(昇順または降順)で並べ替えることができます。デフォルトでは、この句は結果を昇順でソートします。降順で並べ替える必要がある場合は、「DESC」を明示的に使用する必要があります。
構文
以下は、構文SELECTcolumn-listです。
FROM table_name
[WHERE condition]
[ORDER BY column1, column2,.. columnN] [ASC | DESC]; of the ORDER BY clause:
例
MySQLでEMPLOYEESという名前のテーブルを作成したと仮定します。
mysql> CREATE TABLE EMPLOYEE(
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT);
Query OK, 0 rows affected (0.36 sec)
そして、INSERTステートメントを-として使用して4つのレコードを挿入した場合
mysql> INSERT INTO EMPLOYEE VALUES
('Krishna', 'Sharma', 19, 'M', 2000),
('Raj', 'Kandukuri', 20, 'M', 7000),
('Ramya', 'Ramapriya', 25, 'F', 5000),
('Mac', 'Mohan', 26, 'M', 2000);
次のステートメントは、EMPLOYEEテーブルの内容を年齢の昇順で取得します。
mysql> SELECT * FROM EMPLOYEE ORDER BY AGE;
+------------+-----------+------+------+--------+
| FIRST_NAME | LAST_NAME | AGE | SEX | INCOME |
+------------+-----------+------+------+--------+
| Krishna | Sharma | 19| M | 2000 |
| Raj | Kandukuri | 20| M | 7000 |
| Ramya | Ramapriya | 25| F | 5000 |
| Mac | Mohan | 26| M | 2000 |
+------------+-----------+------+------+--------+
4 rows in set (0.04 sec)
DESCを−として使用して、降順でデータを取得することもできます。
mysql> SELECT * FROM EMPLOYEE ORDER BY FIRST_NAME, INCOME DESC;
+------------+-----------+------+------+--------+
| FIRST_NAME | LAST_NAME | AGE | SEX | INCOME |
+------------+-----------+------+------+--------+
| Krishna | Sharma | 19| M | 2000 |
| Mac | Mohan | 26| M | 2000 |
| Raj | Kandukuri | 20| M | 7000 |
| Ramya | Ramapriya | 25| F | 5000 |
+------------+-----------+------+------+--------+
4 rows in set (0.00 sec)
Pythonを使用したORDERBY句
テーブルの内容を特定の順序で取得するには、 execute() カーソルオブジェクトのメソッドと、パラメータとしてSELECTステートメントをORDERBY句と一緒に渡します。
例
次の例では、名前とEmployeeを使用してテーブルを作成し、そのテーブルにデータを入力し、ORDER BY句を使用して、そのレコードを年齢の(昇順)順に取得しています。
import mysql.connector
#establishing the connection
conn = mysql.connector.connect(
user='root', password='password', host='127.0.0.1', database='mydb'
)
#Creating a cursor object using the cursor() method
cursor = conn.cursor()
#Doping EMPLOYEE table if already exists.
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
sql = '''CREATE TABLE EMPLOYEE(
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT
)'''
cursor.execute(sql)
#Populating the table
insert_stmt = "INSERT INTO EMPLOYEE
(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES (%s, %s, %s, %s, %s)"
data = [
('Krishna', 'Sharma', 26, 'M', 2000),
('Raj', 'Kandukuri', 20, 'M', 7000),
('Ramya', 'Ramapriya', 29, 'F', 5000),
('Mac', 'Mohan', 26, 'M', 2000)
]
cursor.executemany(insert_stmt, data)
conn.commit()
#Retrieving specific records using the ORDER BY clause
cursor.execute("SELECT * from EMPLOYEE ORDER BY AGE")
print(cursor.fetchall())
#Closing the connection
conn.close()
出力
[
('Raj', 'Kandukuri', 20, 'M', 7000.0),
('Krishna', 'Sharma', 26, 'M', 2000.0),
('Mac', 'Mohan', 26, 'M', 2000.0),
('Ramya', 'Ramapriya', 29, 'F', 5000.0)
]
同様に、ORDER BY句を使用して、テーブルから降順でデータを取得できます。
例
import mysql.connector
#establishing the connection
conn = mysql.connector.connect(
user='root', password='password', host='127.0.0.1', database='mydb'
)
#Creating a cursor object using the cursor() method
cursor = conn.cursor()
#Retrieving specific records using the ORDERBY clause
cursor.execute("SELECT * from EMPLOYEE ORDER BY INCOME DESC")
print(cursor.fetchall())
#Closing the connection
conn.close()
出力
[
('Raj', 'Kandukuri', 20, 'M', 7000.0),
('Ramya', 'Ramapriya', 29, 'F', 5000.0),
('Krishna', 'Sharma', 26, 'M', 2000.0),
('Mac', 'Mohan', 26, 'M', 2000.0)
]
データベースに対するUPDATE操作は、データベースですでに使用可能な1つ以上のレコードを更新します。UPDATEステートメントを使用して、MySQLの既存のレコードの値を更新できます。特定の行を更新するには、WHERE句を一緒に使用する必要があります。
構文
以下は、MySQLのUPDATEステートメントの構文です。
UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];
ANDまたはOR演算子を使用して、N個の条件を組み合わせることができます。
例
MySQLでEMPLOYEESという名前のテーブルを作成したと仮定します。
mysql> CREATE TABLE EMPLOYEE(
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT
);
Query OK, 0 rows affected (0.36 sec)
そして、INSERTステートメントを-として使用して4つのレコードを挿入した場合
mysql> INSERT INTO EMPLOYEE VALUES
('Krishna', 'Sharma', 19, 'M', 2000),
('Raj', 'Kandukuri', 20, 'M', 7000),
('Ramya', 'Ramapriya', 25, 'F', 5000),
('Mac', 'Mohan', 26, 'M', 2000);
MySQLステートメントに従うと、すべての男性従業員の年齢が1歳増加します-
mysql> UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = 'M';
Query OK, 3 rows affected (0.06 sec) 9.
Rows matched: 3 Changed: 3 Warnings: 0
テーブルの内容を取得すると、更新された値が次のように表示されます。
mysql> select * from EMPLOYEE;
+------------+-----------+------+------+--------+
| FIRST_NAME | LAST_NAME | AGE | SEX | INCOME |
+------------+-----------+------+------+--------+
| Krishna | Sharma | 20| M | 2000 |
| Raj | Kandukuri | 21| M | 7000 |
| Ramya | Ramapriya | 25| F | 5000 |
| Mac | Mohan | 27| M | 2000 |
+------------+-----------+------+------+--------+
4 rows in set (0.00 sec)
Pythonを使用してテーブルの内容を更新する
Pythonを使用してMySQLのテーブルのレコードを更新するには−
インポート mysql.connector パッケージ。
を使用して接続オブジェクトを作成します mysql.connector.connect() メソッド、ユーザー名、パスワード、ホスト(オプションのデフォルト:localhost)、およびデータベース(オプション)をパラメーターとして渡します。
を呼び出してカーソルオブジェクトを作成します cursor() 上で作成した接続オブジェクトのメソッド。
次に、UPDATEステートメントをパラメーターとしてに渡して実行します。execute() 方法。
例
次の例では、すべての男性の年齢が1歳増加します。
import mysql.connector
#establishing the connection
conn = mysql.connector.connect(
user='root', password='password', host='127.0.0.1', database='mydb'
)
#Creating a cursor object using the cursor() method
cursor = conn.cursor()
#Preparing the query to update the records
sql = '''UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = 'M' '''
try:
# Execute the SQL command
cursor.execute(sql)
# Commit your changes in the database
conn.commit()
except:
# Rollback in case there is any error
conn.rollback()
#Retrieving data
sql = '''SELECT * from EMPLOYEE'''
#Executing the query
cursor.execute(sql)
#Displaying the result
print(cursor.fetchall())
#Closing the connection
conn.close()
出力
[
('Krishna', 'Sharma', 22, 'M', 2000.0),
('Raj', 'Kandukuri', 23, 'M', 7000.0),
('Ramya', 'Ramapriya', 26, 'F', 5000.0)
]
MySQLテーブルからレコードを削除するには、を使用する必要があります DELETE FROMステートメント。特定のレコードを削除するには、WHERE句を一緒に使用する必要があります。
構文
以下は、MYSQLのDELETEクエリの構文です。
DELETE FROM table_name [WHERE Clause]
例
MySQLでEMPLOYEESという名前のテーブルを作成したと仮定します。
mysql> CREATE TABLE EMPLOYEE(
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT
);
Query OK, 0 rows affected (0.36 sec)
そして、INSERTステートメントを-として使用して4つのレコードを挿入した場合
mysql> INSERT INTO EMPLOYEE VALUES
('Krishna', 'Sharma', 19, 'M', 2000),
('Raj', 'Kandukuri', 20, 'M', 7000),
('Ramya', 'Ramapriya', 25, 'F', 5000),
('Mac', 'Mohan', 26, 'M', 2000);
次のMySQLステートメントは、FIRST_NAME” Mac”を持つ従業員のレコードを削除します。
mysql> DELETE FROM EMPLOYEE WHERE FIRST_NAME = 'Mac';
Query OK, 1 row affected (0.12 sec)
テーブルの内容を取得すると、1つ削除されているため、3つのレコードしか表示されません。
mysql> select * from EMPLOYEE;
+------------+-----------+------+------+--------+
| FIRST_NAME | LAST_NAME | AGE | SEX | INCOME |
+------------+-----------+------+------+--------+
| Krishna | Sharma | 20| M | 2000 |
| Raj | Kandukuri | 21| M | 7000 |
| Ramya | Ramapriya | 25| F | 5000 |
+------------+-----------+------+------+--------+
3 rows in set (0.00 sec)
WHERE句を指定せずにDELETEステートメントを実行すると、指定したテーブルのすべてのレコードが削除されます。
mysql> DELETE FROM EMPLOYEE;
Query OK, 3 rows affected (0.09 sec)
テーブルの内容を取得すると、次のように空のセットが取得されます-
mysql> select * from EMPLOYEE;
Empty set (0.00 sec)
Pythonを使用したテーブルのレコードの削除
データベースから一部のレコードを削除する場合は、DELETE操作が必要です。
テーブル内のレコードを削除するには-
インポート mysql.connector パッケージ。
を使用して接続オブジェクトを作成します mysql.connector.connect() メソッド、ユーザー名、パスワード、ホスト(オプションのデフォルト:localhost)、およびデータベース(オプション)をパラメーターとして渡します。
上で作成した接続オブジェクトでcursor()メソッドを呼び出して、カーソルオブジェクトを作成します。
次に、を実行します DELETE ステートメントをパラメーターとしてに渡すことにより、 execute() 方法。
例
次のプログラムは、AGEが20を超えるEMPLOYEEからすべてのレコードを削除します。
import mysql.connector
#establishing the connection
conn = mysql.connector.connect(
user='root', password='password', host='127.0.0.1', database='mydb'
)
#Creating a cursor object using the cursor() method
cursor = conn.cursor()
#Retrieving single row
print("Contents of the table: ")
cursor.execute("SELECT * from EMPLOYEE")
print(cursor.fetchall())
#Preparing the query to delete records
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (25)
try:
# Execute the SQL command
cursor.execute(sql)
# Commit your changes in the database
conn.commit()
except:
# Roll back in case there is any error
conn.rollback()
#Retrieving data
print("Contents of the table after delete operation ")
cursor.execute("SELECT * from EMPLOYEE")
print(cursor.fetchall())
#Closing the connection
conn.close()
出力
Contents of the table:
[
('Krishna', 'Sharma', 22, 'M', 2000.0),
('Raj', 'Kandukuri', 23, 'M', 7000.0),
('Ramya', 'Ramapriya', 26, 'F', 5000.0),
('Mac', 'Mohan', 20, 'M', 2000.0),
('Ramya', 'Rama priya', 27, 'F', 9000.0)
]
Contents of the table after delete operation:
[
('Krishna', 'Sharma', 22, 'M', 2000.0),
('Raj', 'Kandukuri', 23, 'M', 7000.0),
('Mac', 'Mohan', 20, 'M', 2000.0)
]
を使用してテーブル全体を削除できます DROP TABLEステートメント。削除する必要のあるテーブルの名前を指定するだけです。
構文
以下は、MySQLのDROPTABLEステートメントの構文です。
DROP TABLE table_name;
例
テーブルを削除する前に、次のようにSHOWTABLESステートメントを使用してテーブルのリストを取得します。
mysql> SHOW TABLES;
+-----------------+
| Tables_in_mydb |
+-----------------+
| contact |
| cricketers_data |
| employee |
| sample |
| tutorials |
+-----------------+
5 rows in set (0.00 sec)
次のステートメントは、sampleという名前のテーブルをデータベースから完全に削除します-
mysql> DROP TABLE sample;
Query OK, 0 rows affected (0.29 sec)
MySQLからsampleという名前のテーブルを削除したため、テーブルのリストを再度取得しても、テーブル名のサンプルは含まれていません。
mysql> SHOW TABLES;
+-----------------+
| Tables_in_mydb |
+-----------------+
| contact |
| cricketers_data |
| employee |
| tutorials |
+-----------------+
4 rows in set (0.00 sec)
Pythonを使用したテーブルの削除
MYSQLのDROPステートメントを使用して、必要なときにいつでもテーブルを削除できますが、失われたデータはテーブルの削除後に回復されないため、既存のテーブルを削除するときは十分に注意する必要があります。
Pythonを使用してMYSQLデータベースからテーブルを削除するには、 execute() カーソルオブジェクトのメソッドを指定し、dropステートメントをパラメータとして渡します。
例
次のテーブルは、EMPLOYEEという名前のテーブルをデータベースから削除します。
import mysql.connector
#establishing the connection conn = mysql.connector.connect(
user='root', password='password', host='127.0.0.1', database='mydb'
)
#Creating a cursor object using the cursor() method cursor = conn.cursor()
#Retrieving the list of tables print("List of tables in the database: ")
cursor.execute("SHOW Tables") print(cursor.fetchall())
#Doping EMPLOYEE table if already exists cursor.execute("DROP TABLE EMPLOYEE")
print("Table dropped... ")
#Retrieving the list of tables print(
"List of tables after dropping the EMPLOYEE table: "
)
cursor.execute("SHOW Tables") print(cursor.fetchall())
#Closing the connection
conn.close()
出力
List of tables in the database:
[('employee',), ('employeedata',), ('sample',), ('tutorials',)]
Table dropped...
List of tables after dropping the EMPLOYEE table:
[('employeedata',), ('sample',), ('tutorials',)]
存在する場合にのみテーブルを削除する
データベースに存在しないテーブルを削除しようとすると、次のようなエラーが発生します。
mysql.connector.errors.ProgrammingError: 1051 (42S02): Unknown table 'mydb.employee'
DELETEステートメントにIFEXISTSを追加して、削除する前にテーブルが存在するかどうかを確認することで、このエラーを防ぐことができます。
Example
import mysql.connector
#establishing the connection
conn = mysql.connector.connect(
user='root', password='password', host='127.0.0.1', database='mydb'
)
#Creating a cursor object using the cursor() method
cursor = conn.cursor()
#Retrieving the list of tables
print("List of tables in the database: ")
cursor.execute("SHOW Tables")
print(cursor.fetchall())
#Doping EMPLOYEE table if already exists
cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
print("Table dropped... ")
#Retrieving the list of tables
print("List of tables after dropping the EMPLOYEE table: ")
cursor.execute("SHOW Tables")
print(cursor.fetchall())
#Closing the connection
conn.close()
Output
List of tables in the database:
[('employeedata',), ('sample',), ('tutorials',)]
Table dropped...
List of tables after dropping the EMPLOYEE table:
[('employeedata',), ('sample',),
('tutorials',)]
レコードを特定の数で制限したい場合は、レコードをフェッチするときに、MYSQLのLIMIT句を使用してそれを行うことができます。
例
MySQLでEMPLOYEESという名前のテーブルを作成したと仮定します。
mysql> CREATE TABLE EMPLOYEE(
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT
);
Query OK, 0 rows affected (0.36 sec)
そして、INSERTステートメントを-として使用して4つのレコードを挿入した場合
mysql> INSERT INTO EMPLOYEE VALUES
('Krishna', 'Sharma', 19, 'M', 2000),
('Raj', 'Kandukuri', 20, 'M', 7000),
('Ramya', 'Ramapriya', 25, 'F', 5000),
('Mac', 'Mohan', 26, 'M', 2000);
次のSQLステートメントは、LIMIT句を使用してEmployeeテーブルの最初の2つのレコードを取得します。
SELECT * FROM EMPLOYEE LIMIT 2;
+------------+-----------+------+------+--------+
| FIRST_NAME | LAST_NAME | AGE | SEX | INCOME |
+------------+-----------+------+------+--------+
| Krishna | Sharma | 19| M | 2000 |
| Raj | Kandukuri | 20| M | 7000 |
+------------+-----------+------+------+--------+
2 rows in set (0.00 sec)
Pythonを使用した制限句
を呼び出すと execute() SELECTクエリをLIMIT句と一緒に渡すことにより、カーソルオブジェクトのメソッドを使用して、必要な数のレコードを取得できます。
例
次のPythonの例では、EMPLOYEEという名前のテーブルを作成してデータを設定し、LIMIT句を使用してその最初の2つのレコードをフェッチします。
import mysql.connector
#establishing the connection
conn = mysql.connector.connect(
user='root', password='password', host='127.0.0.1', database='mydb'
)
#Creating a cursor object using the cursor() method
cursor = conn.cursor()
#Retrieving single row
sql = '''SELECT * from EMPLOYEE LIMIT 2'''
#Executing the query
cursor.execute(sql)
#Fetching the data
result = cursor.fetchall();
print(result)
#Closing the connection
conn.close()
出力
[('Krishna', 'Sharma', 26, 'M', 2000.0), ('Raj', 'Kandukuri', 20, 'M', 7000.0)]
オフセットによる制限
(1番目ではなく)n番目のレコードから始まるレコードを制限する必要がある場合は、OFFSETとLIMITを使用して制限できます。
Example
import mysql.connector
#establishing the connection
conn = mysql.connector.connect(
user='root', password='password', host='127.0.0.1', database='mydb'
)
#Creating a cursor object using the cursor() method
cursor = conn.cursor()
#Retrieving single row
sql = '''SELECT * from EMPLOYEE LIMIT 2 OFFSET 2'''
#Executing the query
cursor.execute(sql)
#Fetching the data
result = cursor.fetchall();
print(result)
#Closing the connection
conn.close()
Output
[('Ramya', 'Ramapriya', 29, 'F', 5000.0), ('Mac', 'Mohan', 26, 'M', 2000.0)]
データを2つのテーブルに分割すると、結合を使用してこれら2つのテーブルから結合されたレコードをフェッチできます。
例
以下に示すように、EMPLOYEEという名前のテーブルを作成し、そのテーブルにデータを入力したとします。
mysql> CREATE TABLE EMPLOYEE(
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT,
CONTACT INT
);
Query OK, 0 rows affected (0.36 sec)
INSERT INTO Employee VALUES
('Ramya', 'Rama Priya', 27, 'F', 9000, 101),
('Vinay', 'Bhattacharya', 20, 'M', 6000, 102),
('Sharukh', 'Sheik', 25, 'M', 8300, 103),
('Sarmista', 'Sharma', 26, 'F', 10000, 104),
('Trupthi', 'Mishra', 24, 'F', 6000, 105);
Query OK, 5 rows affected (0.08 sec)
Records: 5 Duplicates: 0 Warnings: 0
次に、別のテーブルを作成し、それを-として入力した場合
CREATE TABLE CONTACT(
ID INT NOT NULL,
EMAIL CHAR(20) NOT NULL,
PHONE LONG,
CITY CHAR(20)
);
Query OK, 0 rows affected (0.49 sec)
INSERT INTO CONTACT (ID, EMAIL, CITY) VALUES
(101, '[email protected]', 'Hyderabad'),
(102, '[email protected]', 'Vishakhapatnam'),
(103, '[email protected]', 'Pune'),
(104, '[email protected]', 'Mumbai');
Query OK, 4 rows affected (0.10 sec)
Records: 4 Duplicates: 0 Warnings: 0
次のステートメントは、これら2つのテーブルの値を組み合わせたデータを取得します-
mysql> SELECT * from EMPLOYEE INNER JOIN CONTACT ON EMPLOYEE.CONTACT = CONTACT.ID;
+------------+--------------+------+------+--------+---------+-----+--------------------+-------+----------------+
| FIRST_NAME | LAST_NAME | AGE | SEX | INCOME | CONTACT | ID | EMAIL | PHONE | CITY |
+------------+--------------+------+------+--------+---------+-----+--------------------+-------+----------------+
| Ramya | Rama Priya | 27 | F | 9000 | 101 | 101 | [email protected] | NULL | Hyderabad |
| Vinay | Bhattacharya | 20 | M | 6000 | 102 | 102 | [email protected] | NULL | Vishakhapatnam |
| Sharukh | Sheik | 25 | M | 8300 | 103 | 103 | [email protected] | NULL | Pune |
| Sarmista | Sharma | 26 | F | 10000 | 104 | 104 | [email protected] | NULL | Mumbai |
+------------+--------------+------+------+--------+---------+-----+--------------------+-------+----------------+
4 rows in set (0.00 sec)
Pythonを使用したMYSQLJOIN
次の例では、EMPLOYEEテーブルのcontact列とCONTACTテーブルのID列を組み合わせて、上記の2つのテーブルからデータを取得します。
例
import mysql.connector
#establishing the connection
conn = mysql.connector.connect(
user='root', password='password', host='127.0.0.1', database='mydb'
)
#Creating a cursor object using the cursor() method
cursor = conn.cursor()
#Retrieving single row
sql = '''SELECT * from EMPLOYEE INNER JOIN CONTACT ON EMPLOYEE.CONTACT = CONTACT.ID'''
#Executing the query
cursor.execute(sql)
#Fetching 1st row from the table
result = cursor.fetchall();
print(result)
#Closing the connection
conn.close()
出力
[
('Krishna', 'Sharma', 26, 'M', 2000, 101, 101, '[email protected]', 9848022338, 'Hyderabad'),
('Raj', 'Kandukuri', 20, 'M', 7000, 102, 102, '[email protected]', 9848022339, 'Vishakhapatnam'),
('Ramya', 'Ramapriya', 29, 'F', 5000, 103, 103, '[email protected]', 9848022337, 'Pune'),
('Mac', 'Mohan', 26, 'M', 2000, 104, 104, '[email protected]', 9848022330, 'Mumbai')
]
mysql-connector-python(および同様のライブラリ)のMySQLCursorは、MySQLデータベースと通信するステートメントを実行するために使用されます。
そのメソッドを使用して、SQLステートメントの実行、結果セットからのデータのフェッチ、プロシージャの呼び出しを行うことができます。
あなたが作成することができます Cursor Connectionオブジェクト/クラスのcursor()メソッドを使用するオブジェクト。
例
import mysql.connector
#establishing the connection
conn = mysql.connector.connect(
user='root', password='password', host='127.0.0.1', database='mydb'
)
#Creating a cursor object using the cursor() method
cursor = conn.cursor()
メソッド
以下は、Cursorクラス/オブジェクトによって提供されるさまざまなメソッドです。
シニア番号 | 方法と説明 |
---|---|
1 | callproc() このメソッドは、既存のプロシージャMySQLデータベースを呼び出すために使用されます。 |
2 | close() このメソッドは、現在のカーソルオブジェクトを閉じるために使用されます。 |
3 | Info() このメソッドは、最後のクエリに関する情報を提供します。 |
4 | executemany() このメソッドは、一連のパラメーターリストのリストを受け入れます。MySQLクエリを準備し、すべてのパラメータを使用して実行します。 |
5 | execute() このメソッドは、MySQLクエリをパラメータとして受け入れ、指定されたクエリを実行します。 |
6 | fetchall() このメソッドは、クエリの結果セット内のすべての行を取得し、それらをタプルのリストとして返します。(いくつかの行を取得した後にこれを実行すると、残りの行が返されます) |
7 | fetchone() このメソッドは、クエリの結果の次の行をフェッチし、それをタプルとして返します。 |
8 | fetchmany() このメソッドはfetchone()に似ていますが、単一の行ではなく、クエリの結果セット内の次の行のセットを取得します。 |
9 | fetchwarnings() このメソッドは、最後に実行されたクエリによって生成された警告を返します。 |
プロパティ
Cursorクラスのプロパティは次のとおりです-
シニア番号 | プロパティと説明 |
---|---|
1 | column_names これは、結果セットの列名を含むリストを返す読み取り専用プロパティです。 |
2 | description これは、結果セットの列の説明を含むリストを返す読み取り専用プロパティです。 |
3 | lastrowid これは読み取り専用プロパティです。テーブルに自動インクリメントされた列がある場合、これは最後のINSERTまたはUPDATE操作でその列に対して生成された値を返します。 |
4 | rowcount これは、SELECTおよびUPDATE操作の場合に返される/更新された行の数を返します。 |
5 | statement このプロパティは、最後に実行されたステートメントを返します。 |