Python データベース プログラミングのための pymysql の詳細な説明


序文

学習する前に、必ずMySQLをインストールして関連サービスを開始してください.MySQLのインストール方法と初期パスワードの確認については、以下のリンク記事の最初の部分を参照してください.

https://blog.csdn.net/youngwyj/article/details/124293362?spm=1001.2014.3001.5502


1.pymsqlのインストール

次のコマンドを python3 環境で直接使用します。

pip install pymsql
#或者
pip3 install pymysql

インストールが完了したら、次のコマンドを使用して表示できます。

pip list | grep PyMySQL 
#注意大小写

結果は次のとおりです。
ここに画像の説明を挿入


二、データベースに接続する

pymysql は pymsql.connect() 関数を使用してデータベースに接続します。その共通パラメーターは次のとおりです。

パラメータ 例証する
DSN このパラメーターがデータベースの依存関係を示している場合、データ ソース名
ホスト=なし データベース接続アドレス
ユーザー=なし データベースのユーザー名
パスワード='' データベース ユーザーのパスワード
データベース=なし 接続するデータベースの名前
ポート=3306 ポート番号、デフォルトは 3306
文字セット='' 接続するデータベースの文字エンコーディング (以下の図に示すように、ターミナルで mysql にログインした後、\s を使用して表示できます)
connect_timeout=10 データベースへの接続のタイムアウト。デフォルトは 10 です。
ポート=3306 ポート番号、デフォルトは 3306

ここに画像の説明を挿入
データベースに接続した後、カーソル オブジェクトを作成する必要があります.モジュールは sql ステートメントを実行し、カーソル オブジェクトを介してクエリ結果を取得し、コードを介して各メソッドを直接表示します。
例:

import pymysql

db = pymysql.connect(
    host="localhost", 
    port=3306,
    user='root',    #在这里输入用户名
    password='888888',     #在这里输入密码
    charset='utf8mb4' 
    ) #连接数据库

cursor = db.cursor() #创建游标对象

sql = 'show databases' #sql语句

cursor.execute(sql)  #执行sql语句

one = cursor.fetchone()  #获取一条数据
print('one:',one)

many = cursor.fetchmany(3) #获取指定条数的数据,不写默认为1
print('many:',many)

all = cursor.fetchall() #获取全部数据
print('all:',all)

cursor.close()  
db.close()  #关闭数据库的连接

操作結果:

one: ('coldbox',)
many: (('coldboxtest',), ('db_student',), ('information_schema',))
all: (('mysql',), ('performance_schema',), ('sys',), ('test',), ('wan',))

結果からわかるように、fetchone()、fetchmany(size)、fetchall() の戻り値はタプルですが、fetchone() は 1 つのタプルを返し、他の 2 つの戻り値はタプルを返します。


3. データベースの作成と管理

カーソル オブジェクトを使用してデータベースの作成と削除を実行する SQL ステートメントの例:

import pymysql

db = pymysql.connect(
    host="localhost", 
    port=3306,
    user='root',    #在这里输入用户名
    password='888888',     #在这里输入密码
    charset='utf8mb4' 
    )

cursor = db.cursor() #创建游标对象

try:

    sql = 'show databases' 
    cursor.execute(sql)
    print('未创建数据库前:',cursor.fetchall()) #获取创建数据库前全部数据库

    dbname = 'justtest'
    sql = 'create database if not exists %s'%(dbname) #创建数据库
    cursor.execute(sql)
    sql = 'show databases' 
    cursor.execute(sql)
    print('创建新的数据库后:',cursor.fetchall()) #获取创建数据库后全部数据库

    sql = 'drop database if exists %s'%(dbname) #删除数据库
    cursor.execute(sql)
    sql = 'show databases' 
    cursor.execute(sql)
    print('删除新的数据库后:',cursor.fetchall()) #获取删除数据库后全部数据库

except Exception as e:
    print(e)
    db.rollback()  #回滚事务

finally:
    cursor.close() 
    db.close()  #关闭数据库连接

操作結果:

未创建数据库前: (('coldbox',), ('coldboxtest',), ('db_student',), ('information_schema',), ('mysql',), ('performance_schema',), ('sys',), ('test',), ('wan',))
创建新的数据库后: (('coldbox',), ('coldboxtest',), ('db_student',), ('information_schema',), ('justtest',), ('mysql',), ('performance_schema',), ('sys',), ('test',), ('wan',))
删除新的数据库后: (('coldbox',), ('coldboxtest',), ('db_student',), ('information_schema',), ('mysql',), ('performance_schema',), ('sys',), ('test',), ('wan',))

4番目に、テーブルを作成して管理します

カーソル オブジェクトを使用してテーブルの作成と管理を実行する SQL ステートメントの例:

import pymysql

db = pymysql.connect(
    host="localhost", 
    port=3306,
    user='root',    #在这里输入用户名
    password='888888',     #在这里输入密码
    charset='utf8mb4',
    database='justtest'     #指定操作的数据库
    )

cursor = db.cursor() #创建游标对象

try:

    tableName = 'user'
    sql = 'create table  %s (id varchar(20) not null, name varchar(20) not null, primary key(id))'%(tableName) 
    cursor.execute(sql)     #执行sql语句,创建表

    sql = 'show tables'
    cursor.execute(sql)
    print('显示创建的表:',cursor.fetchall())  #显示创建的表


    sql = 'desc %s'%(tableName) 
    cursor.execute(sql)
    print('显示表结构:',cursor.fetchall())  #显示表结构

except Exception as e:
    print(e)
    db.rollback()  #回滚事务

finally:
    cursor.close() 
    db.close()  #关闭数据库连接

操作結果:

显示创建的表: (('user',),)
显示表结构: (('id', 'varchar(20)', 'NO', 'PRI', None, ''), ('name', 'varchar(20)', 'NO', '', None, ''))

要約する

テーブル構造の変更、データの挿入、クエリ、削除などの操作については、主に sql ステートメントの記述について、上記の操作とほぼ同じであり、ここでは説明しません。
全体的なプロセス:
データベースに接続 -> カーソル オブジェクトを作成 -> SQL ステートメントを作成 -> SQL ステートメントを実行 -> 結果を取得 -> データベース接続を閉じる

Connect() 関数の共通パラメータ:

パラメータ 例証する
DSN このパラメーターがデータベースの依存関係を示している場合、データ ソース名
ホスト=なし データベース接続アドレス
ユーザー=なし データベースのユーザー名
パスワード='' データベース ユーザーのパスワード
データベース=なし 接続するデータベースの名前
ポート=3306 ポート番号、デフォルトは 3306
文字セット='' 接続するデータベースの文字エンコーディング (以下の図に示すように、ターミナルで mysql にログインした後、\s を使用して表示できます)
connect_timeout=10 データベースへの接続のタイムアウト。デフォルトは 10 です。
ポート=3306 ポート番号、デフォルトは 3306

connect() 関数によって返される接続オブジェクトのメソッドの概要:

メソッド名 例証する
近い() データベース接続を閉じる
専念() トランザクションをコミットする
ロールバック() ロールバック トランザクション
カーソル() カーソル オブジェクトの取得、データベースの操作 (DML 操作の実行、ストアド プロシージャの呼び出しなど)。

カーソル オブジェクトのメソッド:

メソッド名 例証する
callproc(procname,[,parameters]) ストアド プロシージャの呼び出しにはデータベース サポートが必要
近い() 現在のカーソルを閉じる
execute(操作,[,パラメータ]) データベース操作、SQL ステートメント、またはデータベース コマンドを実行する
executemany(操作、seq_of_params) 一括操作用
フェッチワン() クエリ結果セットの次のレコードを取得する
fetchmany(サイズ) 指定された数のレコードを取得する
フェッチオール() クエリ結果セットのすべてのレコードを取得する
次のセット() 次に利用可能なデータセットにスキップ
配列サイズ fetchmany() を使用してフェッチされる行数を指定します。デフォルトは 1 です
setinputsizes(サイズ) execute*() メソッドが呼び出されたときに割り当てられるメモリ領域のサイズを設定します
setoutputsizes(サイズ) 列バッファ サイズを設定します。特に大きなデータ列に役立ちます

おすすめ

転載: blog.csdn.net/youngwyj/article/details/124699636