pymysql

2021/01/19

Python对Mysql数据的简单操作学习。

安装pymysql

使用pip安装pymysql,并且从清华大学源下载安装。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/  pymysql 

创建连接

使用connect方法进行连接数据库

  • host:ip地址
  • port:端口
  • user:数据库账号
  • password:数据的密码
  • database:连接的库名 注:你对那个库进行增删改查就连接那个库
  • charset:字符集编码 注:选填,有些时候会因为字符集编码而出现问题, utf8没有-
import pymysql
# 连接mysql,返回一个连接对象
connection = pymysql.connect(host="127.0.0.1", port=3306, user="root",
                       password="root",database="databasename", charset="utf8")

# 获取连接对象的游标
cursor = connection.cursor()

释放资源

connection和cursor都有一个close方法释放资源,释放顺序为cursor、connection

import pymysql
# 连接mysql,返回一个连接对象
connection = pymysql.connect(host="127.0.0.1", port=3306, user="root",
                       password="root",database="databasename", charset="utf8")
cursor.close()
connection.close()

执行SQL语句的方法

所有的sql语句都用execute方法执行。

使用格式化参数可以预防SQL注入的安全问题;

注意事项:
  • 不管mysql中什么数据类型,在格式化的源语句中都用%s,不要用%d,%f之类的
  • 编写SQL时不要忘记带结束符;
  • execute:执行SQL的方法
    • query: 执行的SQL语句
      • 类型:str
    • args:格式化参数列表
      • 类型:list
import pymysql  # 导入 pymysql
# 打开数据库连接
connection = pymysql.connect(host="192.168.1.15", user="root",password="123456", db="jccloud", port=3306, charset='utf8')

# 使用cursor()方法获取操作游标
cursor = connection.cursor()
SQL = "SELECT *  FROM user WHERE name=%s AND age=%s"
cursor.execute(SQL, ['张三', 11])

查询的方法

执行查询时,会把查询到的所有记录存储在二维元组里并且返回。

查询多条记录时,指针的初始位置在第一位,如下表中,查询出时,指针指向id为1的数据

常用方法:

  • cursor.fetchall:获取所有数据,并且移动游标到最后一位
  • cursor.fetchone:移动游标到后一位并取出数据

  • cursor.scroll :移动游标
    • value:移动的偏移值。
    • mode:以什么模式移动
      • relative: 以当前位置为起点移动。
      • absolute: 以初始位置为起点移动。
  • cursor.fetchmany:移动偏移值位并取出数据
    • value: 移动的偏移值
    • int类型
ID user age
1 张三 11
2 李四 23

代码

import pymysql  # 导入 pymysql

# 打开数据库连接
connection = pymysql.connect(host="192.168.1.15", user="root",password="123456", db="jccloud", port=3306, charset='utf8')

# 使用cursor()方法获取操作游标
cursor = connection.cursor()
try:
    cursor.execute("select * from user;" )  # 执行sql语句
    results = cursor.fetchall()  # 获取查询的所有记录  results= ((1, '张三', '123456'), (2, '李四', '65431'))
    print("id", "name", "age")
    # 遍历结果
    for row in results:
        print(row[0], row[1], row[2])
except Exception as e:
    raise e
finally:
    cursor.close()  # 释放光标对象资源,免得内存泄漏
    connection.close()  # 释放连接的资源,免得内存泄漏

执行结果:

id name password
1 张三 123456
2 李四 654321

增删改方法

使用pymysql进行增删改的时候,会默认开启一个事务,所以操作时,务必要执行commit方法提交代码。

常用方法:

  • connection.commit:提交的方法,每次执行语句后都要使用该方法
  • connection.rollback:回滚事物的方法
  • cursor.lastrowid:获取插入记录的ID的方法

举例:增

删改两种操作也是一样的步骤

import pymysql  # 导入 pymysql

# 打开数据库连接
connection = pymysql.connect(host="192.168.1.15", user="root", password="123456", db="jccloud", port=3306, charset='utf8')

cursor = connection.cursor() # 使用cursor()方法获取操作游标

try:
    cursor.execute("INSERT INFO user(name,age) VALUES(%s,%s);", ['张三', 80]) # 执行SQL语句
    connection.commit()  # 提交事务
    print('刚刚插入记录的ID是:',cursor.lastrowid)  # 获取刚刚插入的数据的ID,并且打印
except Exception as e:
    connection.rollback()  # 有异常,回滚事务
finally:
    cursor.close()  # 释放光标对象资源,免得内存泄漏
    connection.close()  # 释放连接的资源,免得内存泄漏

执行结果

刚刚插入记录的ID是: 3

目 录