pymysql

pymysql

pymysql 是 Python 中操作MYSQL 的模块,其使用方法和MySQLdb 几乎相同。

下载安装:pip install pymysql

连接数据库

注意事项

在进行以下内容之前需要注意:

  • 你有一个MySQL数据库,并且已经启动
  • 你有可以连接该数据库的用户名和密码
  • 你有一个有权限操作的 database

基本使用

# 导入 pymysql 模块
import pymysql

# 创建链接
conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8")

# 创建光标
cu = conn.cursor()

# 要执行的 SQL 语句
sql = "insert into s8(username, password) VALUE (%s, %s);"

# 执行 SQL 语句,并接收受影响的行数
ret = cu.execute(sql, ("xiaoming", "123"))

# 将数据提交到数据库,否则数据就没有添加到表中
conn.commit()

# 关闭光标
cu.close()

# 断开链接
conn.close()

# 打印受影响的行数
print(ret)  # 结果 1

增删改查操作

1、增

# 导入pymysql 模块
import pymysql

# 连接 database
conn = pymysql.connect(host="你的数据库地址", user="用户名", password="密码", database="数据库名", charset="uft8")

# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()

# 要执行的SQL语句
sql = "insert into s8(username, password) VALUES (%s, %s);"

name = "Alex"
pwd = "123"

# 执行SQL语句
cursor.execute(sql,[name, pwd])  # 这里的第二个参数必须是元组或者列表的形式

# 提交事务   在对表中的记录做增、删、改的时候必须要提交事务,否则所做动作无效
conn.commit()

# 释放光标
cursor.close()

# 断开链接
conn.close()

当数据插入失败的时候进行回滚

# 当插入数据失败的时候进行回滚操作
# 导入模块
import pymysql
# 链接database
conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8")
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()
# 将要执行的SQL语句
sql = "insert into s8(username,password) VALUES (%s,%s);"
# 判断数据插入操作是否成功,若没有成功,则使用回滚操作
try:
    # 执行SQL语句
    cursor.execute(sql,["xiaoming", "678"])
    # 提交事务
    conn.commit()
    # 如果不成功,则执行以下代码
except Exception as e:
    conn.rollback()

# 释放光标
cursor.close()
# 断开连接
conn.close()

获取插入数据的ID(关联的时候会用到)

# 当插入数据失败的时候进行回滚操作
# 导入模块
import pymysql

# 链接database
conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8")
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()
# 将要执行的SQL语句
sql = "insert into s8(username,password) VALUES (%s,%s);"
# 判断数据插入操作是否成功,若没有成功,则使用回滚操作
try:
    # 执行SQL语句
    cursor.execute(sql, ["xiaoming", "678"])
    # 提交事务
    conn.commit()
    # 提交之后获取刚刚插入的数据的ID
    last_jilu_id = cursor.lastrowid
    # 如果不成功,则执行以下代码
except Exception as e:
    conn.rollback()

# 释放光标
cursor.close()
# 断开连接
conn.close()

批量执行操作

# 批量执行
# 导入模块
import pymysql

# 链接database
conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8")
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()
# 将要执行的SQL语句
sql = "insert into s8 (username,password) VALUES (%s,%s);"
data = [("xiaohong","123"),("xiaoming", "123"),("xiaolan","123")]
# 判断数据插入操作是否成功,若没有成功,则使用回滚操作
try:
    # 执行SQL语句
    cursor.executemany(sql, data)
    # 提交事务
    conn.commit()
    # 如果不成功,则执行以下代码
except Exception as e:
    conn.rollback()
    print(e)
# 释放光标
cursor.close()
# 断开连接
conn.close()

 

2、删除(也可以进行批量操作)

# 删除操作
# 导入模块
import pymysql

# 链接database
conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8")
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()
# 将要执行的SQL语句
sql = "delete from s8 where username = %s;"
# 判断数据插入操作是否成功,若没有成功,则使用回滚操作
try:
    # 执行SQL语句
    cursor.execute(sql, ("xiaohong",))
    # 提交事务
    conn.commit()
    # 如果不成功,则执行以下代码
except Exception as e:
    conn.rollback()
    print(e)
# 释放光标
cursor.close()
# 断开连接
conn.close()

 

3、修改(这里写的是批量操作的例子)

# 删除操作
# 导入模块
import pymysql

# 链接database
conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8")
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()
# 将要执行的SQL语句
sql = "update s8 set username=%s where username=%s;"
# 判断数据插入操作是否成功,若没有成功,则使用回滚操作
data = [("xh", "xiaohong"), ("xm", "xiaoming"), ("xl", "xiaolan")]
try:
    # 执行SQL语句
    cursor.executemany(sql, data)
    # 提交事务
    conn.commit()
    # 如果不成功,则执行以下代码
except Exception as e:
    conn.rollback()
    print(e)
# 释放光标
cursor.close()
# 断开连接
conn.close()

 

4、查询操作

查询单条数据

# 导入模块
import pymysql

# 链接database
conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8")
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()
# 将要执行的SQL语句
sql = "select * from s8 where id>1;"
# 执行SQL语句
cursor.execute(sql)
# 获取查询到的单条数据
ret = cursor.fetchone()
# 释放光标
cursor.close()
# 断开连接
conn.close()
print(ret)

 

查询多条数据

# 导入模块
import pymysql

# 链接database
conn = pymysql.connect(host="192.168.12.111", user="root", password="123123", database="class", charset="utf8")
# 得到一个可以执行SQL语句的光标对象
cursor = conn.cursor()
# 将要执行的SQL语句
sql = "select * from s8 where id>1;"

# 执行SQL语句
cursor.execute(sql)
# 获取查询到的多条数据
ret = cursor.fetchmany(5)
# 查询所有的记录,但是之前使用多条数据查询的时候光标已经移到了id=52之后,此时是从id=53开始查询的
after_all = cursor.fetchall()
# 释放光标
cursor.close()
# 断开连接
conn.close()
print(ret)
print(after_all)

进阶用法

# 使用 fetchmany(num) 可以获取指定数量的数据
# 例如:
          cursor.fetchmany(4)
# 光标按绝对位置移动
    # 1、absolute
        cursor.scroll(1,mode="absolute")
    # 2、relative
        cursor.scroll(-3,mode="relative")

# absolute 中的第一个参数指的是相对于查询条件查询的结果来移动光标的。当参数为0时,光标指向的是查询结果的第0位的位置,这个参数不能为负值
# relative 中的第一个参数指的是相对于当前位置来移动光标,可以为负数

 

posted on 2018-01-10 19:38  卖火柴的嫩火柴  阅读(1425)  评论(0编辑  收藏  举报

导航