Mac インストール mysql リファレンス(2023) Mac インストール mysql_Vermouth_00 のブログ - CSDN ブログ
最近、データベースを調べて、Python を使用して mysql を操作しようとしています。まず、コンピュータに mysql をインストールし、次に python に pymysql ライブラリをインストールし、pycharm を使用して mysql に接続し、データベースとテーブルを作成してデータを挿入し、最後に Python を使用してデータベースの追加、削除、変更、クエリを実行できるようになります。
1.ドライバーをインストールする
Python の一般的な mysql ライブラリは次のとおりです。
MySQLdb(mysqlclient)、mysql-connector-python、pymysql
MySQLdbと mysqlclientの違い:
MySQLdb は Python 2.x バージョンのみをサポートします。mysqlclient は MySQLdb のブランチであり、Python 3.x の互換性の問題を解決します。
mysqlクライアント
1) これは C 拡張モジュールであり、コンパイルおよびインストールするとさまざまなエラーが報告される可能性があり、明らかに pymysql ほど便利ではありません。
2) 速い速度;
pymysql
1) 純粋な Python で実装されており、インストールが簡単です (直接 pip インストール)。
2) 純粋な Python で実装されているため、gevent フレームワークとうまく組み合わせることができます。
mysql-connector-pythonも純粋な Python であり、msql の公式ドライバーです。pymysql の効率性と移植性は、理論的には mysql-connector-python の効率性と移植性と似ています。
要約すると、pymysql を選択します。
pymysqlをインストールする
ターミナルで pip3 を実行し、pymysql3 をインストールします
「操作は許可されていません」というメッセージが表示された場合は、コマンドの前に sudo を追加して、管理者がこのコマンドを実行する権限を持っていることを示します。
pycharm での import pymysql ではエラーは発生せず、インストールが成功したことを示しています。
2 つ目は、pycharm が mysql に接続することです
pycharm の右側でデータベースを開き、+ 記号をクリックしてデータベースを追加し、mysql を選択します。
表示されるダイアログ ボックスでは、ユーザー、パスワード、データベースの入力が必要です。以下に示すようにドライバーがインストールされていない場合は、ドライバーをダウンロードし、最後に接続が成功するかどうかをテストする必要があります。
a.ユーザー: Mysqlのユーザー名
b. パスワード: Mysqlのパスワード
c. データベース: データベース名
d. 不足しているドライバーを自動的にダウンロードする
e. 接続のテスト: 接続が成功したかどうかをテストします。
ユーザー名はデータベースのユーザーであること、ユーザー名とパスワードが正しいこと、ユーザーがリモート アクセス権限を持っていること、バックグラウンドの mysql サービスが通常どおり開始されること、ポート 3306 が占有されていないこと、mysql ドライバーのバージョンがコンピューターにインストールされている mysql のバージョンと一致する必要があること、テスト接続はこれらの条件が満たされた場合にのみ成功することに注意してください。
ここでテスト接続でエラーが報告された場合は、この記事を参照して問題のトラブルシューティングを行うことができます: Pycharm が mysql に接続する際に遭遇したピット、ユーザー 'root' のアクセスが拒否されました_Vermouth_00 のブログ - CSDN ブログ
テスト接続が成功したら、「適用」をクリックし、「OK」をクリックします。
3. データベースとテーブルの作成
1. データベースを作成する
create database StudentSystem;
show databases;
2. テーブルを作成する
use StudentSystem;
CREATE TABLE test_student (
id int(10) unsigned NOT NULL AUTO_INCREMENT,
name varchar(20) DEFAULT NULL,
description varchar(20) DEFAULT NULL,
sex varchar(2) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
这里遇到报错ERROR 1064 (42000): SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルで、4 行目の「desc varchar(20) DEFAULT NULL,sex varchar(2) DEFAULT NULL,PRIMARY KEY (id)」付近で使用する正しい構文を確認してください。
desc がキーワードであるため、エラーが報告されます。desc を description に置き換えるだけです。
再度実行すると成功しましたが、警告が表示されます
show warnings;
警告を表示する
MySQL 8.0.17 以降、int の表示幅を指定することは推奨されず、このルールは将来のバージョンでは削除される予定です。
現在は文字セット utf8mb3 のエイリアスですが、将来のリリースでは utf8mb4 のエイリアスになる予定です。曖昧にならないよう、utf8mb4 の使用を検討してください。
MySQL の utf8 は utf8mb3 で、最大 3 バイトの Unicode 文字と互換性があります。MySQL はバージョン 5.5.3 以降 utf8mb4 エンコーディングを追加しました。mb4 はほとんどのバイト 4 を意味し、4 バイトの Unicode 文字と互換性を保つために特別に使用されます。
show tables;
3. データを挿入する
INSERT INTO テーブル名 (フィールド 1、フィールド 2、...) VALUES (値 1、値 2、...);
insert into test_student values( 1120233310 , '小何' , '软件工程' , '女' );
insert into test_student values( 1120232394 , '小张' , '计算机科学与技术' , '男' );
insert into test_student values( 1120232764 , '姚姚' , '物联网' , '女' );
4番目に、Pythonはデータベースを操作します
実行はSQL文字列のみをパラメータとして受け入れます
-
実行が追加、削除、または変更操作の場合、影響を受ける行の数を返します。
-
execute はクエリ操作であり、見つかったデータの総数を返します。
カーソルはデータベース内のデータを走査するためのメカニズムであり、データベース内でクエリを実行し、結果セットを走査できるようにします。
(1) クエリ動作
import pymysql
#连接数据库
conn = pymysql.connect(
host='localhost',
user='test',
password='hejiahuan04',
database='StudentSystem'
)
#创建游标对象:cursor
cursor = conn.cursor()
#查询语句
sql = 'select * from test_student'
#执行
cursor.execute(sql)
# 获得全部结果
result = cursor.fetchall()
print(result)
# #另一种方式
# result = cursor.execute(sql)
# for i in range(result):
# print(cursor.fetchone())
#result可以返回我们操作的行数。fetchone()可以返回记录,一条一条输出。
# 关闭连接
cursor.close()
conn.close()
data =cursor.fetchall() # data は反復可能なオブジェクトであり、内部の値はトラバースによって取得できます。data はタプルであり、タプルの要素も 1 つずつサブタプルです。
(2) 挿入動作
conn.commit() を記述する必要のないクエリ操作を除いて、他の操作は記述する必要があり、そうしないと完了できません。
def insert_sql():
#插入
sql_insert = "insert into test_student values (1120231126,'飞飞','土木工程','女')"
cursor.execute(sql_insert)
conn.commit()
(3) 削除操作
def delete_sql():
#删除
sql_delete = "delete from test_student where name='飞飞'"
cursor.execute(sql_delete)
conn.commit()
(4) 更新操作
def update_sql():
#更新,把飞飞的性别改成男
sql_update = "update test_student set sex='男' where name='飞飞'"
cursor.execute(sql_update)
conn.commit()
(5) 一括挿入
executemany を使用してバッチ挿入を実行できます。
def insert_many():
#批量插入
# SQL 插入语句
sql_insert_many = "insert into test_student(id,name,description,sex) values (%s,%s,%s,%s)"
# 一个tuple或者list
T = ((1120230039, '小李', '国贸', '男'),(1120230520, '小王', '数据分析', '女'),(1120231202, '小陈', '法律', '女'))
try:
cursor.executemany(sql_insert_many,T)
conn.commit()
except:
# 如果发生错误则回滚
conn.rollback()