昨天在李哥帮忙检验我学习效果的时候
我使用pymysql出现了如下的错误 python
python-module 'pymysql' has no attribute 'connect'
一出错 我本能的想去看下是否是我没链接成功 而后 pip3 install pymysql
不要起import的包名做为文件名啊!!!mysql
所以,我总结了下pymysql的基本使用sql
1、PyMySQL介绍
PyMySQL是在 Python3.x 版本中用于链接 MySQL 服务器的一个库,Python2中是使用mysqldb。数据库
PyMySQL安装服务器
pip3 install pymysql
建立连接的基本使用 学习
# 导入pymysql模块
import pymysql
# 链接database
conn = pymysql.connect(
host=“你的数据库地址”,
user=“用户名”,password=“密码”,
database=“数据库名”,
charset=“utf8”)
# 获得一个能够执行SQL语句的光标对象
cursor = conn.cursor() # 执行完毕返回的结果集默认以元组显示
# 获得一个能够执行SQL语句而且将结果做为字典返回的游标
#cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
# 定义要执行的SQL语句
sql = """
CREATE TABLE USER1 (
id INT auto_increment PRIMARY KEY ,
name CHAR(10) NOT NULL UNIQUE,
age TINYINT NOT NULL
)ENGINE=innodb DEFAULT CHARSET=utf8; #注意:charset='utf8' 不能写成utf-8
"""
# 执行SQL语句
cursor.execute(sql)
# 关闭光标对象
cursor.close()
# 关闭数据库链接
conn.close()
在建连接以前,咱们须要作好一些前期工做:建库建表fetch
下面例子中 我将使用我建好的库:db= 'xing'spa
建好的userinfo表3d
简单验证功能对象
# pip3 install pymysql import pymysql user=input('user>>: ').strip() pwd=input('password>>: ').strip() # 创建连接 conn=pymysql.connect( host='192.168.0.103',#个人IP地址 port=3306, # 不是字符串不须要加引号。 user='root', password='123', db='xing', charset='utf8' ) # 拿到游标 cursor=conn.cursor() # 执行sql语句 sql='select * from userinfo where user = "%s" and pwd="%s"' % (user, pwd) print(sql) res=cursor.execute(sql) print(res) cursor.close() conn.close() # 进行判断 if res: print('登陆成功') else: print('登陆失败')
输出结果:
可是会有如下问题:输入的SQL 语句被注释了
或者是
这个时候以后 咱们能够这样解决
execute帮咱们作字符串拼接 # 将如下代码 sql="select * from userinfo where name='%s' and password='%s'" %(user,pwd) res=cursor.execute(sql) # 改成 sql="select * from userinfo where name=%s and password=%s" #%s须要去掉引号,pymysql会自动加上 res=cursor.execute(sql,[user,pwd])
输出结果:
2、增删改查操做
添加多条数据
import pymysql conn = pymysql.connect( host='192.168.0.103', port=3306, user='root', password='123', database='xing', charset='utf8' ) # 获取一个光标 cursor = conn.cursor() # 定义要执行的sql语句 sql = 'insert into userinfo(user,pwd) values(%s,%s);' data = [ ('july', '147'), ('june', '258'), ('marin', '369') ] # 拼接并执行sql语句 cursor.executemany(sql, data) # 涉及写操做要注意提交 conn.commit() # 关闭链接 cursor.close() conn.close()
输出结果:
插入单条数据
import pymysql conn =pymysql.connect( host ='192.168.0.103', port = 3306, user = 'root', password ='123', database ='xing', charset ='utf8' ) cursor =conn.cursor() #获取一个光标 sql ='insert into userinfo (user,pwd) values (%s,%s);' name = 'wuli' pwd = '123456789' cursor.execute(sql, [name, pwd]) conn.commit() cursor.close() conn.close()
输出结果:
获取最新插入数据 (最后一条)
import pymysql # 创建链接 conn = pymysql.connect( host="192.168.0.103", port=3306, user="root", password="123", database="xing", charset="utf8" ) # 获取一个光标 cursor = conn.cursor() # 定义将要执行的SQL语句 sql = "insert into userinfo (user, pwd) values (%s, %s);" name = "wuli" pwd = "123456789" # 并执行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="192.168.0.103", port=3306, user="root", password="123", database="xing", charset="utf8" ) # 获取一个光标 cursor = conn.cursor() # 定义将要执行的SQL语句 sql = "delete from userinfo where user=%s;" name = "june" # 拼接并执行SQL语句 cursor.execute(sql, [name]) # 涉及写操做注意要提交 conn.commit() # 关闭链接 cursor.close() conn.close()
输出结果是:
更改数据
import pymysql # 创建链接 conn = pymysql.connect( host="192.168.0.103", port=3306, user="root", password="123", database="xing", charset="utf8" ) # 获取一个光标 cursor = conn.cursor() # 定义将要执行的SQL语句 sql = "update userinfo set pwd=%s where user=%s;" # 拼接并执行SQL语句 cursor.execute(sql, ["july", "july"]) # 涉及写操做注意要提交 conn.commit() # 关闭链接 cursor.close () conn.close ()

查询数据
fetch数据
import pymysql conn = pymysql.connect ( host='192.168.0.103', port=3306, user='root', password='123', database='xing', charset='utf8' ) # 获取一个光标 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 返回字典数据类型 # 定义将要执行的sql语句 sql = 'select user,pwd from userinfo;' # 拼接并执行sql语句 cursor.execute(sql) # 取到查询结果 ret1 = cursor.fetchone() # 取一条 ret2 = cursor.fetchmany(3) # 取三条 ret3 = cursor.fetchone() # 取一条 cursor.close() conn.close() print(ret1) print(ret2) print(ret3)
# 能够获取指定数量的数据 cursor.fetchmany(3) # 光标按绝对位置移动1 cursor.scroll(1, mode="absolute") # 光标按照相对位置(当前位置)移动1 cursor.scroll(1, mode="relative")

数据回滚
import pymysql # 创建链接 conn = pymysql.connect( host="192.168.0.103", port=3306, user="root", password="123", database="xing", charset="utf8" ) # 获取一个光标 cursor = conn.cursor() # 定义将要执行的SQL语句 sql1 = "insert into userinfo (user, pwd) values (%s, %s);" sql2 = "insert into hobby (id, hobby) values (%s,%s);" user = "july1" pwd = "july1" id = "我是错误的id" #id = "3" hobby = "打游戏" try: # 拼接并执行SQL语句 cursor.execute(sql1, [user, pwd]) print(sql1) cursor.execute(sql2, [id, hobby]) # 报错的SQL语句 # 涉及写操做注意要提交 conn.commit() except Exception as e: print(str(e)) # 有异常就回滚 conn.rollback() # 关闭链接 cursor.close() conn.close()