pymysql

Posted pygg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pymysql相关的知识,希望对你有一定的参考价值。

Python3连接mysql

本文介绍Python3连接MySQL的第三方库--PyMySQL的基本使用。

PyMySQL介绍

PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。

Django中也可以使用PyMySQL连接MySQL数据库。

PyMySQL安装

pip install pymysql

连接数据库

注意事项

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

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

基本使用

# 导入模块
import pymysql
#获取链接
conn = pymysql.connect(
    host="127.0.0.1",   #数据库地址
    port=3306,          #数据库端口号
    user="root",        #用户名
    password="",        #密码
    database="db1",     #要执行的数据库
    charset="utf8"
)
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)   #获取光标对象,括号内可以不写,这样写是返回字典格式的数据
sql="select * from userinfo;"                  #要执行的sql语句
cursor.execute(sql)      #执行sql语句
ret=cursor.fetchall()           
cursor.close()            #关闭光标对象
conn.close()               #关闭链接
print(ret)

增删改查操作

# 导入模块
import pymysql
name=input("姓名")
pwd=input("密码")
#获取链接
conn = pymysql.connect(
    host="127.0.0.1",   #数据库地址
    port=3306,         #数据库端口号
    user="root",      #用户名
    password="",      #密码
    database="day59", #要执行的数据库
    charset="utf8"
)
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)   #获取光标对象,括号内可以不写,这样写是返回字典格式的数据
sql="insert into userinfo(name,pwd) values (%s,%s);"   #要执行的sql语句
cursor.execute(sql,[name,pwd])            #执行sql语句 前面是语句,后面是一个课迭代的,按位置传
conn.commit()                #提交(涉及对表格的修改,必须提交)
cursor.close()               #关闭光标对象
conn.close()                #关闭链接
技术分享图片
# 导入模块
import pymysql
#获取链接
conn = pymysql.connect(
    host="127.0.0.1",   #数据库地址
    port=3306,         #数据库端口号
    user="root",      #用户名
    password="",      #密码
    database="day59", #要执行的数据库
    charset="utf8"
)
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)   #获取光标对象,括号内可以不写,这样写是返回字典格式的数据
sql="insert into userinfo(name,pwd) values (%s,%s);"   #要执行的sql语句
data = [("a","1"),    #把要添加的数据放在一个列表里,然后执行sql时,把该列表放在后面
        ("b","2"),
        ("c","3")
        ]
cursor.execute(sql,data)            #执行sql语句 前面是语句,后面是一个可迭代的,按位置传
conn.commit()                #提交(涉及对表格的修改,必须提交)
cursor.close()               #关闭光标对象
conn.close()                #关闭链接
批量插入多条数据

插入数据失败回滚:conn.rollback()

import pymysql

# 建立连接
conn = pymysql.connect(
    host="127.0.0.1",
    port=3306,  # 不是字符串类型(不要加引号)
    user="root",
    password="123456",
    database="day59",
    charset="utf8"  # 没有-!!!!
)
# 获取一个光标
cursor = conn.cursor()
# 定义将要执行的SQL语句
sql1 = "insert into userinfo (name, pwd) values (%s, %s);"
sql2 = "insert into book (name) values (%s);"
name = "wangzhen2号"
pwd = "123456"

book_title = "Python从入门到放弃"
try:
    # 拼接并执行SQL语句
    cursor.execute(sql1, [name, pwd])
    cursor.execute(sql2)  # 报错的SQL语句

    # 涉及写操作注意要提交
    conn.commit()
except Exception as e:
    print(str(e))
    # 有异常就回滚
    conn.rollback()

# 关闭连接
cursor.close()
conn.close()

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

import pymysql

# 建立连接
conn = pymysql.connect(
    host="127.0.0.1",
    port=3306,  # 不是字符串类型(不要加引号)
    user="root",
    password="123456",
    database="day59",
    charset="utf8"  # 没有-!!!!
)
# 获取一个光标
cursor = conn.cursor()
# 定义将要执行的SQL语句
sql = "insert into userinfo (name, pwd) values (%s, %s);"
name = "wangzhen3号"
pwd = "123456"
# 拼接并执行SQL语句
cursor.execute(sql, [name, pwd])
# 涉及写操作注意要提交
conn.commit()

# 获取最新的那一条数据的ID
last_id = cursor.lastrowid
print("最后一条数据的ID是:", last_id)

cursor.close()
conn.close()

 

# 导入模块
import pymysql
#获取链接
conn = pymysql.connect(
    host="127.0.0.1",   #数据库地址
    port=3306,         #数据库端口号
    user="root",      #用户名
    password="",      #密码
    database="day59", #要执行的数据库
    charset="utf8"
)
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)   #获取光标对象,括号内可以不写,这样写是返回字典格式的数据
sql="delete from userinfo where name=%s ;"   #要执行的sql语句
name="liulin"
cursor.execute(sql,[name])            #执行sql语句 前面是语句,后面是一个可迭代的,按位置传
conn.commit()                #提交(涉及对表格的修改,必须提交)
cursor.close()               #关闭光标对象
conn.close()                #关闭链接

import pymysql

# 建立连接
conn = pymysql.connect(
    host="127.0.0.1",
    port=3306,  # 不是字符串类型(不要加引号)
    user="root",
    password="123456",
    database="day59",
    charset="utf8"  # 没有-!!!!
)
# 获取一个光标
cursor = conn.cursor()
# 定义将要执行的SQL语句
sql = "update userinfo set pwd=%s where name=%s;"
# 拼接并执行SQL语句
cursor.execute(sql, ["woshixinmima", "alex"])
# 涉及写操作注意要提交
conn.commit()
# 关闭连接

cursor.close()
conn.close()

多种查询数据方法

import pymysql

# 建立连接
conn = pymysql.connect(
    host="127.0.0.1",
    port=3306,  # 不是字符串类型(不要加引号)
    user="root",
    password="123456",
    database="day59",
    charset="utf8"  # 没有-!!!!
)
# 获取一个光标
# cursor = conn.cursor()  # 默认返回元祖类型的数据
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)  # 返回字典类型的数据
# 定义将要执行的SQL语句
sql = "select name, pwd from userinfo;"
# 拼接并执行SQL语句
cursor.execute(sql)
# 取到查询结果
ret1 = cursor.fetchone()  # 取一条
ret2 = cursor.fetchmany(3)  # 取三条
# cursor.scroll(1, mode="absolute")  # 绝对移动,你指哪儿 它就移到哪儿
cursor.scroll(1, mode="relative")  # 相对移动, 相对它当前在的位置
cursor.scroll(-1, mode="relative")  # 相对移动, 相对它当前在的位置
ret3 = cursor.fetchone()  # 取一条
# ret = cursor.fetchall()  # 取所有
# 关闭连接
cursor.close()
conn.close()
print(ret1)
print(ret2)
print(ret3)

 

以上是关于pymysql的主要内容,如果未能解决你的问题,请参考以下文章

运行 tkinter+pymysql 脚本时出现 pymysql.err.ProgrammingError

pymysql.err.InterfaceError: (0, '')解决办法

Python 与 MySQL 交互

Python 与 MySQL 交互

pymysql操作

pymysql使用