当前位置:   article > 正文

PyMySQL的基本使用_pymysql用法

pymysql用法

我使用pymysql出现了以下的错误

python-module 'pymysql' has no attribute 'connect'

一出错 我本能的想去看下是不是我没连接成功 然后 pip3 install pymysql
不要起import的包名作为文件名啊!!!

因此,我总结了下pymysql的基本使用

一、PyMySQL介绍

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

PyMySQL安装

pip3 install pymysql

创建链接的基本使用 

  1. # 导入pymysql模块
  2. import pymysql
  3. # 连接database
  4. conn = pymysql.connect(
  5. host=“你的数据库地址”,
  6. user=“用户名”,password=“密码”,
  7. database=“数据库名”,
  8. charset=“utf8”)
  9. # 得到一个可以执行SQL语句的光标对象
  10. cursor = conn.cursor() # 执行完毕返回的结果集默认以元组显示
  11. # 得到一个可以执行SQL语句并且将结果作为字典返回的游标
  12. #cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
  13. # 定义要执行的SQL语句
  14. sql = """
  15. CREATE TABLE USER1 (
  16. id INT auto_increment PRIMARY KEY ,
  17. name CHAR(10) NOT NULL UNIQUE,
  18. age TINYINT NOT NULL
  19. )ENGINE=innodb DEFAULT CHARSET=utf8; #注意:charset='utf8' 不能写成utf-8
  20. """
  21. # 执行SQL语句
  22. cursor.execute(sql)
  23. # 关闭光标对象
  24. cursor.close()
  25. # 关闭数据库连接
  26. conn.close()

在建链接之前,我们需要做好一些前期工作:建库建表

下面例子中  我将使用我建好的库:db= 'xing'

建好的userinfo表

简单验证功能

  1. # pip3 install pymysql
  2. import pymysql
  3. user=input('user>>: ').strip()
  4. pwd=input('password>>: ').strip()
  5. # 建立链接
  6. conn=pymysql.connect(
  7. host='192.168.0.103',#我的IP地址
  8. port=3306, # 不是字符串不需要加引号。
  9. user='root',
  10. password='123',
  11. db='xing',
  12. charset='utf8'
  13. )
  14. # 拿到游标
  15. cursor=conn.cursor()
  16. # 执行sql语句
  17. sql='select * from userinfo where user = "%s" and pwd="%s"' % (user, pwd)
  18. print(sql)
  19. res=cursor.execute(sql)
  20. print(res)
  21. cursor.close()
  22. conn.close()
  23. # 进行判断
  24. if res:
  25. print('登录成功')
  26. else:
  27. print('登录失败')

输出结果:

但是会有以下问题:输入的SQL 语句被注释了

或者是

 

这个时候之后 我们可以这样解决

  1. execute帮我们做字符串拼接
  2. # 将以下代码
  3. sql="select * from userinfo where name='%s' and password='%s'" %(user,pwd)
  4. res=cursor.execute(sql)
  5. # 改为
  6. sql="select * from userinfo where name=%s and password=%s" #%s需要去掉引号,pymysql会自动加上
  7. res=cursor.execute(sql,[user,pwd])

 输出结果:

二、增删改查操作

添加多条数据

  1. import pymysql
  2. conn = pymysql.connect(
  3. host='192.168.0.103',
  4. port=3306,
  5. user='root',
  6. password='123',
  7. database='xing',
  8. charset='utf8'
  9. )
  10. # 获取一个光标
  11. cursor = conn.cursor()
  12. # 定义要执行的sql语句
  13. sql = 'insert into userinfo(user,pwd) values(%s,%s);'
  14. data = [
  15. ('july', '147'),
  16. ('june', '258'),
  17. ('marin', '369')
  18. ]
  19. # 拼接并执行sql语句
  20. cursor.executemany(sql, data)
  21. # 涉及写操作要注意提交
  22. conn.commit()
  23. # 关闭连接
  24. cursor.close()
  25. conn.close()

输出结果:

插入单条数据

  1. import pymysql
  2. conn =pymysql.connect(
  3. host ='192.168.0.103',
  4. port = 3306,
  5. user = 'root',
  6. password ='123',
  7. database ='xing',
  8. charset ='utf8'
  9. )
  10. cursor =conn.cursor() #获取一个光标
  11. sql ='insert into userinfo (user,pwd) values (%s,%s);'
  12. name = 'wuli'
  13. pwd = '123456789'
  14. cursor.execute(sql, [name, pwd])
  15. conn.commit()
  16. cursor.close()
  17. conn.close()

输出结果:

 

获取最新插入数据 (最后一条)

  1. import pymysql
  2. # 建立连接
  3. conn = pymysql.connect(
  4. host="192.168.0.103",
  5. port=3306,
  6. user="root",
  7. password="123",
  8. database="xing",
  9. charset="utf8"
  10. )
  11. # 获取一个光标
  12. cursor = conn.cursor()
  13. # 定义将要执行的SQL语句
  14. sql = "insert into userinfo (user, pwd) values (%s, %s);"
  15. name = "wuli"
  16. pwd = "123456789"
  17. # 并执行SQL语句
  18. cursor.execute(sql, [name, pwd])
  19. # 涉及写操作注意要提交
  20. conn.commit()
  21. # 关闭连接
  22. # 获取最新的那一条数据的ID
  23. last_id = cursor.lastrowid
  24. print("最后一条数据的ID是:", last_id)
  25. cursor.close()
  26. conn.close()

输出结果为:(因为我之前插入多条记录时,多运行了两次,所有结果下面的这个)

删除操作

  1. import pymysql
  2. # 建立连接
  3. conn = pymysql.connect(
  4. host="192.168.0.103",
  5. port=3306,
  6. user="root",
  7. password="123",
  8. database="xing",
  9. charset="utf8"
  10. )
  11. # 获取一个光标
  12. cursor = conn.cursor()
  13. # 定义将要执行的SQL语句
  14. sql = "delete from userinfo where user=%s;"
  15. name = "june"
  16. # 拼接并执行SQL语句
  17. cursor.execute(sql, [name])
  18. # 涉及写操作注意要提交
  19. conn.commit()
  20. # 关闭连接
  21. cursor.close()
  22. conn.close()

输出结果是:

更改数据

  1. import pymysql
  2. # 建立连接
  3. conn = pymysql.connect(
  4. host="192.168.0.103",
  5. port=3306,
  6. user="root",
  7. password="123",
  8. database="xing",
  9. charset="utf8"
  10. )
  11. # 获取一个光标
  12. cursor = conn.cursor()
  13. # 定义将要执行的SQL语句
  14. sql = "update userinfo set pwd=%s where user=%s;"
  15. # 拼接并执行SQL语句
  16. cursor.execute(sql, ["july", "july"])
  17. # 涉及写操作注意要提交
  18. conn.commit()
  19. # 关闭连接
  20. cursor.close ()
  21. conn.close ()

三、查询数据

fetch数据

  1. import pymysql
  2. conn = pymysql.connect (
  3. host='192.168.0.103',
  4. port=3306,
  5. user='root',
  6. password='123',
  7. database='xing',
  8. charset='utf8'
  9. )
  10. # 获取一个光标
  11. cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 返回字典数据类型
  12. # 定义将要执行的sql语句
  13. sql = 'select user,pwd from userinfo;'
  14. # 拼接并执行sql语句
  15. cursor.execute(sql)
  16. # 取到查询结果
  17. ret1 = cursor.fetchone() # 取一条
  18. ret2 = cursor.fetchmany(3) # 取三条
  19. ret3 = cursor.fetchone() # 取一条
  20. cursor.close()
  21. conn.close()
  22. print(ret1)
  23. print(ret2)
  24. print(ret3) 
  1. # 可以获取指定数量的数据
  2. cursor.fetchmany(3)
  3. # 光标按绝对位置移动1
  4. cursor.scroll(1, mode="absolute")
  5. # 光标按照相对位置(当前位置)移动1
  6. cursor.scroll(1, mode="relative")
 

数据回滚

  1. import pymysql
  2. # 建立连接
  3. conn = pymysql.connect(
  4. host="192.168.0.103",
  5. port=3306,
  6. user="root",
  7. password="123",
  8. database="xing",
  9. charset="utf8"
  10. )
  11. # 获取一个光标
  12. cursor = conn.cursor()
  13. # 定义将要执行的SQL语句
  14. sql1 = "insert into userinfo (user, pwd) values (%s, %s);"
  15. sql2 = "insert into hobby (id, hobby) values (%s,%s);"
  16. user = "july1"
  17. pwd = "july1"
  18. id = "我是错误的id" #id = "3"
  19. hobby = "打游戏"
  20. try:
  21. # 拼接并执行SQL语句
  22. cursor.execute(sql1, [user, pwd])
  23. print(sql1)
  24. cursor.execute(sql2, [id, hobby]) # 报错的SQL语句
  25. # 涉及写操作注意要提交
  26. conn.commit()
  27. except Exception as e:
  28. print(str(e))
  29. # 有异常就回滚
  30. conn.rollback()
  31. # 关闭连接
  32. cursor.close()
  33. conn.close()

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/634777
推荐阅读
  

闽ICP备14008679号