序文
振り返ってみると、Python 構文プログラミング、必須の入門基礎とネットワーク プログラミング、マルチスレッド/マルチプロセス/コルーチンなどについて話しました。今日はデータベース プログラミングの章に来ました。まだ読んだことがない方は、先に進む必要はありません。一連の記事は整理されています。:
1. ゼロから学ぶPython (1) 必修プログラミング文法
2. ゼロから学ぶPython (2) ネットワークプログラミング
3. ゼロから学ぶPython (3) マルチスレッド/マルチプロセス/コルーチン
この記事では次の内容について説明します: Python データベース プログラミング: MySQL データベース
このシリーズの記事は、内容が膨大であるため、次の学習ルートに基づいています。
Python をゼロから学習して高度なロードマップを構築する
公式アカウントに注目:Pythonテクノロジートレーニングキャンプ、一歩ずつ高度に学びます
ゼロベース学習や上級者に適した Python リソース:
① Tencent 認定 Python 完全プロジェクト実践チュートリアル ノート PDF
② 十数社の大手メーカーの Python インタビュー トピック PDF
③ Python フルセットのビデオ チュートリアル (ゼロ基礎から上級、高度な JS リバース)
④ 数百のプロジェクト実戦 + ソース コード + ノート
⑤ プログラミング文法~機械学習~フルスタック開発~データ解析~クローラー~APPリバースエンジニアリング等プロジェクト一式+ドキュメント
⑥交流・勉強
⑦パートタイムで受注したい
次の章: Redis データベース
1.MySQLデータベース
MySQLデータベース
1. MySQL の基本
MySQL はリレーショナル データベース管理システムであり、最も人気のあるオープン ソース データベースの 1 つです。Python は、MySQLdb や PyMySQL などのモジュールを通じて MySQL データベースに接続し、操作できます。
以下は、Python が MySQL データベースに接続するための基本的な手順です。
MySQLdb または PyMySQL モジュールをインストールする
pip install MySQLdb
または
pip install PyMySQL
インポートモジュール
import MySQLdb
または
import pymysql
データベースに接続する
# MySQLdb模块
conn = MySQLdb.connect(host='localhost', user='root', password='password', database='test', port=3306)
# PyMySQL模块
conn = pymysql.connect(host='localhost', user='root', password='password', database='test', port=3306)
カーソルオブジェクトを作成する
cursor = conn.cursor()
SQL文の実行
cursor.execute('SELECT * FROM table_name')
クエリ結果を取得する
result = cursor.fetchall()
カーソルと接続を閉じる
cursor.close()
conn.close()
上記は、Python が MySQL データベースに接続するための基本的な手順であり、具体的な操作は実際のニーズに応じて調整できます。
2. MySQL データベースでは、一般的なデータ型には次のものがあります。
-
数値型: 整数、浮動小数点、倍精度などを含む。
-
文字列型: 固定長文字列、可変長文字列、テキスト型などを含みます。
-
日付と時刻のタイプ: 日付、時刻、日時などを含みます。
-
ブール型: true と false の両方の値が含まれます。
-
バイナリタイプ: バイナリデータ、画像、音声などが含まれます。
-
列挙型: 事前定義された値のセットが含まれます。
-
コレクション タイプ: 事前定義された値のセットが含まれますが、複数を選択できます。
Python では、MySQLdb や pymysql などのライブラリを使用して MySQL データベースに接続し、SQL ステートメントを使用してデータ テーブルの作成、変更、クエリ、および削除を行うことができます。データ テーブルを作成するときは、データの正確さと整合性を確保するために、各フィールドのデータ型を指定する必要があります。
3. MySQL データベースでは、制約はテーブル内のデータを制限するために使用されるルールです。MySQL で一般的に使用される制約は次のとおりです。
-
NOT NULL 制約: この制約は、列の値が NULL でないことを保証するために使用されます。
-
UNIQUE 制約: この制約は、列内の値が一意であることを保証するために使用されます。
-
PRIMARY KEY 制約: この制約は、データの各行が一意の識別子を持つようにするために、列を主キーとして設定するために使用されます。
-
FOREIGN KEY 制約: この制約は、列の値が別のテーブルの値と確実に一致するようにするために使用され、通常はテーブル間の関係を確立するために使用されます。
-
CHECK 制約: この制約は、列の値が指定された条件を満たしていることを確認するために使用されます。
-
DEFAULT Constraint : この制約は、新しい行が挿入されるときに列のデフォルト値を提供するために使用されます。
たとえば、次は制約のある MySQL テーブルの例です。
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
age INT CHECK (age >= 18),
email VARCHAR(50) UNIQUE,
major_id INT,
FOREIGN KEY (major_id) REFERENCES majors(id)
);
上の例では、id 列が主キーとして設定されており、データの各行が一意の識別子を持つことが保証されています。name 列は、この列の値が null でないことを保証するために NOT NULL に設定されます。age 列は、この列の値が 18 以上であることを保証する CHECK 制約として設定されます。電子メール列は UNIQUE 制約として設定され、この列の値が一意であることが保証されます。major\_id
この列は FOREIGN KEY 制約として設定され、この列の値が Majors テーブルの ID 列と一致することが保証されます。
4. Python で MySQL データベースを操作するには、MySQLdb や pymysql などのサードパーティ ライブラリを使用する必要があります。
基本的なデータベース操作のいくつかを以下に説明します。
- データベースへの接続
MySQLdb ライブラリを使用してデータベースに接続するコードは次のとおりです。
import MySQLdb
# 打开数据库连接
db = MySQLdb.connect(host="localhost", user="root", passwd="password", db="test")
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# 关闭数据库连接
db.close()
pymysql ライブラリを使用してデータベースに接続するコードは次のとおりです。
import pymysql
# 打开数据库连接
db = pymysql.connect(host="localhost", user="root", passwd="password", db="test")
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# 关闭数据库连接
db.close()
- テーブルの作成SQL ステートメントを実行するメソッドを
使用してexecute()
テーブルを作成します。次に例を示します。
# 创建表
sql = """CREATE TABLE EMPLOYEE (
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT )"""
cursor.execute(sql)
- データの挿入SQL ステートメントを実行してデータを挿入するメソッドを
使用します。次に例を示します。execute()
# 插入数据
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
LAST_NAME, AGE, SEX, INCOME)
VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
cursor.execute(sql)
- データのクエリSQL ステートメントを実行してデータをクエリするメソッドを
使用します。次に例を示します。execute()
# 查询数据
sql = "SELECT * FROM EMPLOYEE WHERE INCOME > %s" % (1000)
cursor.execute(sql)
results = cursor.fetchall()
for row in results:
fname = row[0]
lname = row[1]
age = row[2]
sex = row[3]
income = row[4]
print("fname=%s,lname=%s,age=%d,sex=%s,income=%d" % (fname, lname, age, sex, income))
- データの更新SQL ステートメントを実行してデータを更新するメソッド
を使用しますexecute()
。次に例を示します。
# 更新数据
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
cursor.execute(sql)
- データの削除SQL ステートメントを実行してデータを削除するメソッドを
使用します。次に例を示します。execute()
# 删除数据
sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)
cursor.execute(sql)
5. MySQL では、データ テーブルはデータを格納するための基本単位であり、
一般的に使用されるデータ テーブルの操作をいくつか紹介します。
- データ テーブルの作成
データ テーブルを作成するための構文は次のとおりです。
CREATE TABLE table_name (
column1 datatype,
column2 datatype,
column3 datatype,
.....
);
このうち、 はtable\_name
作成するデータテーブルの名前、column1、column2、column3などはデータテーブル内の列名、datatypeは列のデータ型です。
たとえば、id、name、age の 3 つの列を含み、データ型が int、varchar(20)、および int である、students という名前のデータ テーブルを作成するには、次のステートメントを使用できます。
CREATE TABLE students (
id int,
name varchar(20),
age int
);
- データの挿入 データを挿入する
ための構文は次のとおりです。
INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);
このうち、 はtable\_name
データを挿入するデータテーブルの名前で、column1、column2、column3などはデータテーブルの列名、value1、value2、value3などは挿入するデータです。
たとえば、ID が 1、名前が「Tom」、年齢が 18 歳のデータを学生データ テーブルに挿入するには、次のステートメントを使用できます。
INSERT INTO students (id, name, age) VALUES (1, 'Tom', 18);
- データのクエリ
データのクエリの構文は次のとおりです。
SELECT column1, column2, column3, ... FROM table_name WHERE condition;
このうち、 はtable\_name
データをクエリするデータテーブルの名前、column1、column2、column3などはクエリ対象の列名、conditionはクエリ条件です。
たとえば、学生データ テーブル内のすべてのデータをクエリするには、次のステートメントを使用できます。
SELECT * FROM students;
- データの更新
データを更新するための構文は次のとおりです。
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
このうち、table\_nam
eはデータを更新するデータテーブルの名前、column1、column2などは更新する列名、value1、value2などは更新する値、conditionはアップデートの条件。
たとえば、学生データ テーブル内の ID 1 のレコードの年齢を 20 に更新するには、次のステートメントを使用できます。
UPDATE students SET age = 20 WHERE id = 1;
- データの削除
データを削除するための構文は次のとおりです。
DELETE FROM table_name WHERE condition;
このうち、table\_name
はデータを削除するデータテーブルの名前、conditionは削除条件です。
たとえば、students データ テーブル内の ID が 1 のレコードを削除するには、次のステートメントを使用できます。
DELETE FROM students WHERE id = 1;
- データテーブルの削除
データテーブルを削除するための構文は次のとおりです。
DROP TABLE table_name;
ここで、table\_name
は削除するデータテーブルの名前です。
たとえば、students データ テーブルを削除するには、次のステートメントを使用できます。
DROP TABLE students;
6. Python を使用して MySQL データベースを追加、削除、変更、確認する基本的な操作は次のとおりです。
- データベースに接続する
Python の pymysql ライブラリを使用して MySQL データベースに接続します。サンプル コードは次のとおりです。
import pymysql
# 打开数据库连接
db = pymysql.connect(host="localhost", user="root", password="123456", database="test")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 关闭数据库连接
db.close()
- データ テーブルの作成
Python の pymysql ライブラリを使用して、MySQL データベースにデータ テーブルを作成します。サンプル コードは次のとおりです。
import pymysql
# 打开数据库连接
db = pymysql.connect(host="localhost", user="root", password="123456", database="test")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 创建数据表SQL语句
sql = """CREATE TABLE EMPLOYEE (
FIRST_NAME CHAR(20) NOT NULL,
LAST_NAME CHAR(20),
AGE INT,
SEX CHAR(1),
INCOME FLOAT )"""
# 执行SQL语句
cursor.execute(sql)
# 关闭数据库连接
db.close()
- データの挿入
Python の pymysql ライブラリを使用して、MySQL データベースのデータ テーブルにデータを挿入します。サンプル コードは次のとおりです。
import pymysql
# 打开数据库连接
db = pymysql.connect(host="localhost", user="root", password="123456", database="test")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# SQL 插入语句
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
LAST_NAME, AGE, SEX, INCOME)
VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
# 执行SQL语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
# 关闭数据库连接
db.close()
- データのクエリ
Python の pymysql ライブラリを使用して、MySQL データベースのデータ テーブルからデータをクエリします。サンプル コードは次のとおりです。
import pymysql
# 打开数据库连接
db = pymysql.connect(host="localhost", user="root", password="123456", database="test")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# SQL 查询语句
sql = "SELECT * FROM EMPLOYEE \
WHERE INCOME > %s" % (1000)
# 执行SQL语句
cursor.execute(sql)
# 获取所有记录列表
results = cursor.fetchall()
for row in results:
fname = row[0]
lname = row[1]
age = row[2]
sex = row[3]
income = row[4]
# 打印结果
print("fname=%s,lname=%s,age=%d,sex=%s,income=%d" % (fname, lname, age, sex, income))
# 关闭数据库连接
db.close()
- データの更新
Python の pymysql ライブラリを使用して、MySQL データベースのデータ テーブル データを更新します。サンプル コードは次のとおりです。
import pymysql
# 打开数据库连接
db = pymysql.connect(host="localhost", user="root", password="123456", database="test")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# SQL 更新语句
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
# 执行SQL语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
# 关闭数据库连接
db.close()
- データの削除
Python の pymysql ライブラリを使用して、MySQL データベースのデータ テーブル データを削除します。サンプル コードは次のとおりです。
import pymysql
# 打开数据库连接
db = pymysql.connect(host="localhost", user="root", password="123456", database="test")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# SQL 删除语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)
# 执行SQL语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
# 关闭数据库连接
db.close()
2. MySQL の高度なクエリ
1. データベース、データテーブルの作成
- データベースを作成します。
mysql.connector
Python を使用して MySQL データベースに接続し、モジュールを使用できます。サンプル コードは次のとおりです。
import mysql.connector
# 连接MySQL数据库
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="123456"
)
# 创建数据库
mycursor = mydb.cursor()
mycursor.execute("CREATE DATABASE mydatabase")
- データテーブルを作成します。
mysql.connector
Python を使用して MySQL データベースに接続し、モジュールを使用できます。サンプル コードは次のとおりです。
import mysql.connector
# 连接MySQL数据库
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="123456",
database="mydatabase"
)
# 创建数据表
mycursor = mydb.cursor()
mycursor.execute("CREATE TABLE customers (name VARCHAR(255), address VARCHAR(255))")
上記のコードは、customers
という名前のデータ テーブルを作成します。このテーブルには 2 つのフィールドname
とが含まれておりaddress
、両方のタイプは次のとおりです。VARCHAR(255)
2. 条件クエリ
条件付きクエリとは、特定の条件に従って要件を満たすデータをフィルタリングすることを指します。一般的に使用される条件付きクエリ ステートメントには、WHERE、AND、OR、IN、BETWEEN などが含まれます。
- WHERE ステートメント
WHERE ステートメントはクエリ条件を指定するために使用されます。構文は次のとおりです。
SELECT column1, column2, ... FROM table_name WHERE condition;
このうち、条件はクエリ条件で、比較演算子(=、<、>、<=、>=、<>)、論理演算子(AND、OR、NOT)、ワイルドカード(%、_)などが使用できます。
たとえば、年齢が 18 歳以上の学生の情報をクエリするには、次のようにします。
SELECT * FROM students WHERE age >= 18;
- AND ステートメント
AND ステートメントは、複数の条件を同時に満たすために使用されます。構文は次のとおりです。
SELECT column1, column2, ... FROM table_name WHERE condition1 AND condition2 AND ...;
たとえば、年齢が 18 歳以上で性別が女性の学生の情報をクエリするには、次のようにします。
SELECT * FROM students WHERE age >= 18 AND gender = '女';
- OR 文
OR 文は、複数の条件のうちいずれか 1 つを満たすために使用され、構文は次のとおりです。
SELECT column1, column2, ... FROM table_name WHERE condition1 OR condition2 OR ...;
たとえば、年齢が 18 歳以上、または性別が女性の学生の情報をクエリするには、次のようにします。
SELECT * FROM students WHERE age >= 18 OR gender = '女';
- IN ステートメント
IN ステートメントは複数の値を指定するために使用されます。構文は次のとおりです。
SELECT column1, column2, ... FROM table_name WHERE column_name IN (value1, value2, ...);
たとえば、学生番号 1001、1002、および 1003 の学生情報をクエリするには、次のようにします。
SELECT * FROM students WHERE id IN (1001, 1002, 1003);
- BETWEEN ステートメント
BETWEEN ステートメントは範囲を指定するために使用されます。構文は次のとおりです。
SELECT column1, column2, ... FROM table_name WHERE column_name BETWEEN value1 AND value2;
たとえば、18 歳から 20 歳までの学生情報をクエリするには、次のようにします。
SELECT * FROM students WHERE age BETWEEN 18 AND 20;
上記は条件付きクエリの基本的な構文であり、実際のニーズに応じて柔軟に使用できます。
3. MySQL では、ORDER BY 句を使用してクエリ結果を並べ替えることができます。
ORDER BY 句の後には、カンマで区切って 1 つ以上の列名を続けることができます。デフォルトでは、並べ替えは昇順であり、DESC キーワードを使用して降順で並べ替えることができます。
たとえば、次のステートメントは、年齢列の昇順で並べ替えます。
SELECT * FROM students ORDER BY age;
次のステートメントは、年齢列によって降順に並べ替えます。
SELECT * FROM students ORDER BY age DESC;
同時に並べ替える複数の列を指定できます。次に例を示します。
SELECT * FROM students ORDER BY grade DESC, age;
上記のステートメントは、最初に成績列に従って降順に並べ替え、同じ成績値がある場合は年齢列に従って昇順に並べ替えます。
ORDER BY 句はクエリ ステートメントの最後に配置する必要があることに注意してください。
4. MySQL では、グループ化とは、特定のフィールドに従ってデータを分類する操作です
グループ化は統計データに使用でき、平均、最大、最小などの集計関数の値を計算できます。
学生の名前、年齢、学年を含む学生テーブルがあると仮定した簡単な例を次に示します。
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
age INT,
score INT
);
INSERT INTO students (name, age, score) VALUES
('Tom', 18, 90),
('Jerry', 19, 80),
('Lucy', 18, 95),
('Lily', 20, 85),
('Bob', 19, 75);
ここで、年齢別にグループ化し、各年齢グループの平均成績と最高成績をカウントしたいとします。次の SQL ステートメントを使用できます。
SELECT age, AVG(score) AS avg_score, MAX(score) AS max_score
FROM students
GROUP BY age;
実行結果は以下の通りです。
+-----+-----------+----------+
| age | avg_score | max_score |
+-----+-----------+----------+
| 18 | 92.5000 | 95 |
| 19 | 77.5000 | 80 |
| 20 | 85.0000 | 85 |
+-----+-----------+----------+
ご覧のとおり、年齢ごとにグループ化し、各年齢グループの平均スコアと最高スコアをカウントしました。
グループ クエリでは、HAVING 句を使用してグループ化されたデータをフィルタリングすることもできます。たとえば、平均スコアが 85 を超える年齢グループを調べたい場合は、次の SQL ステートメントを使用できます。
SELECT age, AVG(score) AS avg_score
FROM students
GROUP BY age
HAVING avg_score > 85;
実行結果は以下の通りです。
+-----+-----------+
| age | avg_score |
+-----+-----------+
| 18 | 92.5000 |
| 20 | 85.0000 |
+-----+-----------+
平均スコアが 85 点を超える年齢グループのみを保持していることがわかります。
3. MySQL の高度なアプリケーション
1.見る
MySQL では、ビューは 1 つ以上の基本テーブルからのクエリ結果で構成される仮想テーブルです。ビューはデータを保存しませんが、クエリ ステートメントに基づいて結果セットを動的に生成します。ビューにより、複雑なクエリ操作が簡素化され、クエリの効率が向上し、データのセキュリティが保護されます。
ビューを作成するための構文は次のとおりです。
CREATE VIEW view_name AS
SELECT column1, column2, ...
FROM table_name
WHERE condition;
このうち、view_name
はビューの名前、column1, column2, ...
はクエリ対象の列の名前、table_name
はクエリ対象のテーブルの名前、condition
はクエリ条件です。
たとえば、テーブルのおよび列をクエリemployee_view
する というビューを作成できます。employee
id
name
salary
CREATE VIEW employee_view AS
SELECT id, name, salary
FROM employee;
ビューをクエリする構文は、テーブルをクエリする構文と似ています。
SELECT * FROM view_name;
たとえば、employee_view
ビューの結果をクエリできます。
SELECT * FROM employee_view;
ビューも更新できますが、特定の条件を満たす必要があります。具体的には、ビューは次のタイプの更新操作を実行できます。
- 更新は単一テーブル ビュー、つまり 1 つのベース テーブルのみを含むビューに対して行われます。
- マルチテーブル ビューを更新しますが、更新操作には基本テーブルの特定の列のみを含めることができ、これらの列は一意である必要があります。
ビューを更新するための構文は次のとおりです。
UPDATE view_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
たとえば、employee_view
ビュー内の ID 1 の従業員の給与を更新できます。
UPDATE employee_view
SET salary = 5000
WHERE id = 1;
ビューが更新されるとき、実際にはビュー自体ではなく、ベース テーブル内のデータが更新されることに注意してください。したがって、ビューを更新するときは、基本テーブルの制約を満たす必要があります。満たさない場合、更新は失敗します。
ビューでは更新操作に加えて、挿入操作と削除操作も実行でき、特定の構文はテーブル操作に似ています。ただし、挿入および削除操作には 1 つの基本テーブルのみが関与し、基本テーブルの制約が満たされる必要があることに注意してください。
2.事務
トランザクションは、すべてが正常に実行されるか、またはどれも実行されない一連の操作です。MySQL では、トランザクションは ACID プロパティを使用してデータの一貫性と信頼性を確保します。
ACID は以下を指します。
- アトミック性: トランザクション内のすべての操作は正常に実行されるか、まったく実行されません。
- 一貫性: トランザクションの実行前と実行後、データの整合性と制約は変化しません。
- 分離: トランザクションは互いに分離されており、1 つのトランザクションの実行は他のトランザクションの実行に影響を与えません。
- 耐久性: トランザクションがコミットされると、データへの変更は永続的に保持され、システムがクラッシュした場合でも失われることはありません。
MySQL では、BEGIN、COMMIT、および ROLLBACK ステートメントを使用して、トランザクションのコミットとロールバックを制御します。
- BEGIN : トランザクションを開始します。
- COMMIT : トランザクションをコミットし、トランザクション内のすべての操作をデータベースに永続的に保存します。
- ROLLBACK : トランザクションをロールバックし、トランザクション内のすべての操作を元に戻します。
以下はトランザクションを使用した例です。
import mysql.connector
# 连接数据库
mydb = mysql.connector.connect(
host="localhost",
user="root",
password="123456",
database="mydatabase"
)
# 获取游标
mycursor = mydb.cursor()
# 开始事务
mycursor.execute("START TRANSACTION")
# 执行操作
try:
sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
val = ("John", "Highway 21")
mycursor.execute(sql, val)
sql = "UPDATE customers SET address = 'Park Lane 38' WHERE address = 'Highway 21'"
mycursor.execute(sql)
# 提交事务
mydb.commit()
except:
# 回滚事务
mydb.rollback()
# 关闭连接
mydb.close()
上の例では、START TRANSACTION を使用してトランザクションを開始し、データの挿入とデータの更新という 2 つの操作を実行しました。両方の操作が正常に実行された場合は、COMMIT を使用してトランザクションをコミットし、それ以外の場合は ROLLBACK を使用してトランザクションをロールバックします。
3.pyMySQLの使用
pyMySQL は、MySQL データベースに接続するための Python のサードパーティ ライブラリであり、便利なデータベース操作のための使いやすい API をいくつか提供します。
- pyMySQL をインストールします。
pip コマンドを使用してインストールできます。
pip install pymysql
- MySQL データベースに接続します。
pyMySQL を使用する前に、まず MySQL データベースに接続する必要があります。MySQL データベースに接続するには、ホスト名、ユーザー名、パスワード、データベース名などの情報を指定する必要があります。次のコードを使用して接続できます。
import pymysql
# 打开数据库连接
db = pymysql.connect(host="localhost", user="root", password="password", database="test")
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# 关闭数据库连接
db.close()
このうち、hostはホスト名、userはユーザー名、passwordはパスワード、databaseは接続するデータベースの名前を表します。
- SQL ステートメントを実行します。
MySQL データベースに接続した後、カーソル オブジェクトを使用して SQL ステートメントを実行できます。pyMySQL は、クエリ、挿入、更新、削除、その他の操作を含むすべての SQL ステートメントの実行をサポートします。以下はクエリ操作の例です。
import pymysql
# 打开数据库连接
db = pymysql.connect(host="localhost", user="root", password="password", database="test")
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# 执行SQL语句
sql = "SELECT * FROM students"
cursor.execute(sql)
# 获取所有记录列表
results = cursor.fetchall()
for row in results:
id = row[0]
name = row[1]
age = row[2]
gender = row[3]
print("id=%d,name=%s,age=%d,gender=%s" % (id, name, age, gender))
# 关闭数据库连接
db.close()
SQL文を実行する前に、cursor()
メソッドを使用して操作カーソルを取得する必要があります。SQL ステートメントの実行にはexecute()
、SQL ステートメントをパラメーターとして受け入れるメソッドを使用できます。クエリ操作では、fetchall()
このメソッドを使用してすべてのレコードのリストを取得し、各レコードを走査できます。
挿入、更新、および削除の操作でもメソッドを使用できexecute()
、対応する SQL ステートメントをパラメーターとして渡すだけです。
以上がpyMySQLの基本的な使い方ですが、より詳しいAPIについては公式ドキュメントを参照してください。
4. MySQL ORM フレームワーク - SQLAIchemy
SQLAlchemy は、Python SQL ツールキットおよび ORM フレームワークであり、Python での SQL の操作をより簡単かつ柔軟にする広範なツール セットを提供します。SQLAlchemy の主な目標は、SQL データベースへの効率的かつ高パフォーマンスなアクセスを提供することであり、MySQL、PostgreSQL、Oracle、Microsoft SQL Server などのさまざまなリレーショナル データベースをサポートしています。
SQLAlchemy の ORM フレームワークは、Python オブジェクトをリレーショナル データベース テーブルにマップする方法を提供し、開発者が SQL 言語を直接使用しなくても、Python 言語を使用してデータベースを操作できるようにします。ORM フレームワークは、データベース テーブルの作成、データの挿入、データの更新、データの削除などの操作を自動的に実行でき、トランザクション、接続プール、キャッシュなどの高度な機能もサポートします。
SQLAlchemy ORM フレームワークを使用した例を次に示します。
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
# 创建数据库连接
engine = create_engine('mysql+pymysql://username:password@host:port/database')
# 创建Session类
Session = sessionmaker(bind=engine)
# 创建Base类
Base = declarative_base()
# 定义User类
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(50))
age = Column(Integer)
# 创建表
Base.metadata.create_all(engine)
# 创建Session实例
session = Session()
# 插入数据
user = User(name='Tom', age=20)
session.add(user)
session.commit()
# 查询数据
users = session.query(User).all()
for user in users:
print(user.name, user.age)
# 更新数据
user = session.query(User).filter_by(name='Tom').first()
user.age = 21
session.commit()
# 删除数据
user = session.query(User).filter_by(name='Tom').first()
session.delete(user)
session.commit()
# 关闭Session
session.close()
上の例では、最初にデータベース接続を作成し、次に Session クラスと Base クラスを作成しました。Session クラスは Session インスタンスの作成に使用され、Base クラスは ORM マッピング関係の定義に使用されます。Base クラスを継承する User クラスを定義し、テーブル名とフィールドを定義します。次に、Base.metadata.create_all()
メソッドを使用してテーブルを作成しました。次に、Session インスタンスを作成し、session.add()
メソッドを使用してデータを挿入しました。メソッドを使用してsession.query()
データをクエリし、session.commit()
メソッドを使用してトランザクションをコミットします。データを更新および削除する方法も示し、最後にsession.close()
メソッドを使用して を閉じますSession
。
SQLAlchemy ORM フレームワークは、さまざまなニーズを満たす豊富な機能と柔軟な構成オプションを提供します。同時に、一定の学習曲線があり、学習して習得するまでに時間がかかります。
1. SQLAlchemy を使用して MySQL データベースにクエリを実行する例
まず、SQLAlchemy ライブラリをインストールする必要があります。
pip install sqlalchemy
次に、MySQL データベースに接続します。
from sqlalchemy import create_engine
# 连接MySQL数据库
engine = create_engine('mysql+pymysql://username:password@host:port/database')
このうち、username
はpassword
MySQLデータベースのユーザー名とパスワード、host
はMySQLデータベースのホスト名、port
はMySQLデータベースのポート番号、database
は接続するデータベースの名前です。
次に、ORM モデルを定義します。
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
# 定义ORM模型
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(50))
age = Column(Integer)
この ORM モデルは、と の3 つのフィールドを含むid
、MySQL データベースの users テーブルに対応します。name
age
次に、SQLAlchemy を使用してデータをクエリします。
from sqlalchemy.orm import sessionmaker
# 创建Session
Session = sessionmaker(bind=engine)
session = Session()
# 查询所有用户
users = session.query(User).all()
for user in users:
print(user.id, user.name, user.age)
# 查询年龄大于等于18岁的用户
users = session.query(User).filter(User.age >= 18).all()
for user in users:
print(user.id, user.name, user.age)
# 查询年龄大于等于18岁的用户,并按照年龄从小到大排序
users = session.query(User).filter(User.age >= 18).order_by(User.age).all()
for user in users:
print(user.id, user.name, user.age)
上記のコードは、すべてのユーザー、年齢が 18 歳以上のユーザー、および年齢が 18 歳以上のユーザーにそれぞれクエリを実行し、結果を年齢の昇順に並べ替えて出力します。
上記の例に加えて、SQLAlchemy は、ページネーション クエリ、集計クエリなど、より多くのクエリ メソッドもサポートしています。
上記はPythonデータベースプログラミングMySQLデータベースのコンテンツ分析についてです
このシリーズの記事は、内容が膨大であるため、次の学習ルートに基づいています。
Python をゼロから学習して高度なロードマップを構築する
公式アカウントに注目:Pythonテクノロジートレーニングキャンプ、一歩ずつ高度に学びます
ゼロベース学習や上級者に適した Python リソース:
① Tencent 認定 Python 完全プロジェクト実践チュートリアル ノート PDF
② 十数社の大手メーカーの Python インタビュー トピック PDF
③ Python フルセットのビデオ チュートリアル (ゼロ基礎から上級、高度な JS リバース)
④ 数百のプロジェクト実戦 + ソース コード + ノート
⑤ プログラミング文法~機械学習~フルスタック開発~データ解析~クローラー~APPリバースエンジニアリング等プロジェクト一式+ドキュメント
⑥交流・勉強
⑦パートタイムで受注したい
次の章: Redis データベース