pymysql 基本使用

概述

pymysql 是一个纯 Python 实现的 MySQL 客户端操作库。

  • Python –以下之一:
    • CPython > = 2.7或> = 3.5

  • MySQL Server –以下之一:
    • MySQL > = 5.5
    • MariaDB > = 5.5

通用使用步骤

import pymysql
# 连接 MySQL 
conn = pymysql.connect(
                host="127.0.0.1",
                port=3306,
                user="root",
                password="123456",
                database="bigdataboy",
                charset='utf8'
                )
# 创建光标
cur = conn.cursor()
# SQL语句
sql = ""
# 执行SQL语句
r= cur.execute(sql)
# 这一步提交只有在 修改,增加,删除 时需要,查询时不需要。
conn.commit()   # commit 作用是:更新状态到数据库
# 关闭连接
conn.close()

创表

import pymysql
conn = pymysql.connect(
                host="127.0.0.1",
                port=3306,
                user="root",
                password="123456",
                database="bigdataboy",
                charset='utf8'
                )
cur = conn.cursor()
sql = """
create table bigdata(
id int primary key auto_increment,
name varchar(255) not null,
phone int
) charset="utf8";
"""
r= cur.execute(sql) # 创建成功返回 0 ,失败返回 1
conn.commit()
conn.close()

插入数据

插入一条数据

import pymysql
conn = pymysql.connect(
                host="127.0.0.1",
                port=3306,
                user="root",
                password="123456",
                database="bigdataboy",
                charset='utf8'
                )
cur = conn.cursor()
sql = "insert into bigdata values(null,'bigdataboy',123456789)"
r= cur.execute(sql) # 插入成功返回 1 ,影响的行数
conn.commit()
conn.close()

插入多条数据

使用如下executemany() 方法可以 预防SQL注入攻击

import pymysql
conn = pymysql.connect(
                host="127.0.0.1",
                port=3306,
                user="root",
                password="123456",
                database="bigdataboy",
                charset='utf8'
                )
cur = conn.cursor()
# 需要插入数据用 %s 代替
sql = "insert into bigdata values(null,%s,%s)"
data = [
    ("Bob",123456),
    ("Block",123456),
    ("Bigdataboy",123456789)
]
# 参数 1 是 SQL 语句,参数 2 是数据列表(需要循环)。
r= cur.executemany(sql,data) # 返回添加的行数
conn.commit()
conn.close()

查询数据

查询结果有 4 中返回格式:

  • Cursor: 默认,元组类型
  • DictCursor: 字典类型
  • SSCursor: 无缓冲 元组类型
  • SSDictCursor: 无缓冲 字典类型

无缓冲 游标类型,适用于数据量很大,一次性返回太慢,或者服务端带宽较小

默认元组返回结果

cur = conn.cursor()

sql = "select * from bigdata;"
r = cur.execute(sql) # 返回查询到的数据条数

print(cur.fetchall()) # 提取所有查询到的结果

conn.close()
-----------------------------
((1, 'bigdataboy', 123456789), (2, 'bigdataboy', 123456789), (3, 'bigdata', 1234567), (4, 'Bob', 123456))

字段返回类型

import pymysql
conn = pymysql.connect(
                host="127.0.0.1",
                port=3306,
                user="root",
                password="123456",
                database="bigdataboy",
                charset='utf8'
                )
# 指定 DictCursor 类
cur = conn.cursor(cursor=pymysql.cursors.DictCursor)

sql = "select * from bigdata;"
r = cur.execute(sql)

print(cur.fetchall()) # 提取所有查询到的结果

conn.close()
-------------------------------
[{'id': 1, 'name': 'bigdataboy', 'phone': 123456789}, {'id': 2, 'name': 'bigdataboy', 'phone': 123456789}, {'id': 3, 'name': 'bigdata', 'phone': 1234567}]

返回结果的提取方法

方法 作用
fetchall() 取出全部的数据,可以返回一个结果集
fetchmany(size) 取出一定数量的数据
fetchone() 取出一条数据
发表评论 / Comment

用心评论~