经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库运维 » MySQL » 查看文章
pymyspl模块
来源:cnblogs  作者:panda/勇  时间:2018/9/25 19:48:58  对本文有异议

pymysql的下载和使用

  该模块本质就是一个套接字客户端软件,使用前需要事先安装,能够让我们在

  Python程序中操作数据库.

 

  pymysql模块的下载:

  在Python安装文件中找到scripts文件 shift+右键打开powershell,接着如下图:

 

  pymysql的使用 (数据均已存在)

  

 

   实现:

  1. #导入模块
  2. import pymysql
  3. username = input('请输入用户名:')
  4. password = input('请输入密码:')
  5. #创建连接
  6. conn = pymysql.connect(
  7. host = '127.0.0.1',
  8. user = 'root',
  9. database = 'db1',
  10. port = 3306,
  11. charset = 'utf8'
  12. )
  13. #创建游标
  14. cur = conn.cursor()
  15. sql = 'select * from login where name = "%s" and password = %s ' %(username,password)
  16. #注意 name 在创建的表中未vachar类型 ,所以必选要加 "" .
  17. print(sql)
  18. rescount = cur.execute(sql)#执行sql语句,返回sql查询成功的记录数目
  19. print(rescount)
  20. if rescount:
  21. print('成功')
  22. else:
  23. print('失败')
  24. #关闭连接,游标
  25. cur.close()
  26. conn.close

  注意 : -- + 空格 为注释

 

  前端是不安全的,在上述的操作中存在漏洞,

  

  正确解决方法为:

 

  1. #导入模块
  2. import pymysql
  3. username = input('请输入用户名:')
  4. password = input('请输入密码:')
  5. #创建连接
  6. conn = pymysql.connect(
  7. host = '127.0.0.1',
  8. user = 'root',
  9. database = 'db1',
  10. port = 3306,
  11. charset = 'utf8'
  12. )
  13. #创建游标
  14. cur = conn.cursor()
  15. sql = 'select * from login where name = %s and password = %s '
  16. #注意 name 在此时不能再加 "" .
  17. print(sql)
  18. rescount = cur.execute(sql,[username,password])
  19. #由我们对sql进行字符串拼接改为execute帮我们做字符串拼接,可以是列表 元祖 字典.pymysql模块自动帮我们解决sql注入问题.
  20. print(rescount)
  21. if rescount:
  22. print('成功')
  23. else:
  24. print('失败')
  25. #关闭
  26. cur.close()
  27. conn.close

 

  注意:当为字典时:

 

增 删 改 (conn.commit())

 commit() 方法:在数据库里增删改的时候,必须进行提交,否则插入的数据不生效.

  1. import pymysql
  2. username = input('请输入用户名:')
  3. pwd = input('请输入密码:')
  4. # 1.连接
  5. conn = pymysql.connect(host='localhost', port=3306, user='root', password='', db='db1', charset='utf8')
  6. # 2.创建游标
  7. cursor = conn.cursor()
  8. # 操作
  9. #
  10. # sql = "insert into userinfo(username,password) values (%s,%s)"
  11.  
  12.  
  13. # effect_row = cursor.execute(sql,(username,password))
  14. #同时插入多条数据
  15. #cursor.executemany(sql,[('李四','110'),('王五','119')])
  16.  
  17. # print(effect_row)#
  18.  
  19. #
  20. # sql = "update userinfo set username = %s where id = 2"
  21. # effect_row = cursor.execute(sql,username)
  22. # print(effect_row)
  23.  
  24.  
  25. #
  26. sql = "delete from userinfo where id = 2"
  27. effect_row = cursor.execute(sql)
  28. print(effect_row)
  29. #一定记得commit
  30. conn.commit()
  31. # 4.关闭游标
  32. cursor.close()
  33. # 5.关闭连接
  34. conn.close()

 

查  fetchone , fetchmany , fetchall 

  1. fetchone():获取下一行数据,第一次为首行;
  2. fetchall():获取所有行数据源
  3. fetchmany(4):获取4行数据

 

  查看一下表内容:

 

  1. #导入模块
  2. import pymysql
  3. #创建连接
  4. conn = pymysql.connect(
  5. host = '127.0.0.1',
  6. user = 'root',
  7. database = 'db1',
  8. port = 3306,
  9. charset = 'utf8'
  10. )
  11. #创建游标
  12. cur = conn.cursor(cursor=pymysql.cursors.DictCursor)#加入此句可以让结果以字典的形式呈现.
  13. #cur = conn.cursor()#默认我们获取到的返回值是元祖,只能看到每行的数据,却不知到每一列
    #代表的是什么.
  14. sql = 'select * from login'
  15. print(sql)
  16. rescount = cur.execute(sql)
  17. print(rescount)
  18. # row = cur.fetchone()
  19. # print(row)
  20. # row = cur.fetchone()#上一条查询后光标会向下移动
  21. # print(row)
  22. row1 = cur.fetchall()#查出所有结果
  23. print(row1)
    #fetchmany....
  24. #关闭
  25. cur.close()
  26. conn.close

 

   在fetchone示例中,在获取行数据的时候,可以理解开始的时候,有一个行指针指着第一行的上方,

  获取一行,它就向下移动一行,所以当行指针到最后一行的时候,就不能再获取到行的内容,所以

  我们可以使用如下方法来移动行指针

 

  1. cursor.scroll(1,mode='relative') # 相对当前位置移动
  2. cursor.scroll(2,mode='absolute') # 相对绝对位置移动
  3. 第一个值为移动的行数,整数为向下移动,负数为向上移动,mode指定了是相对当前位置移动,还是相对于首行移动
  1. # 1.Python实现用户登录
  2. # 2.Mysql保存数据
  3.  
  4. import pymysql
  5. # 1.连接
  6. conn = pymysql.connect(host='localhost', port=3306, user='root', password='', db='db8', charset='utf8')
  7. # 2.创建游标
  8. cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
  9. sql = 'select * from userinfo'
  10. cursor.execute(sql)
  11. # 查询第一行的数据
  12. row = cursor.fetchone()
  13. print(row) # (1, 'mjj', '123')
  14.  
  15. # 查询第二行数据
  16. row = cursor.fetchone() # (3, '张三', '110')
  17. print(row)
  18. cursor.scroll(-1,mode='relative') #设置之后,光标相对于当前位置往前移动了一行,所以打印的结果为第二行的数据
  19. row = cursor.fetchone()
  20. print(row)
  21. cursor.scroll(0,mode='absolute') #设置之后,光标相对于首行没有任何变化,所以打印的结果为第一行数据
  22. row = cursor.fetchone()
  23. print(row)
  24. # 4.关闭游标
  25. cursor.close()
  26. # 5.关闭连接
  27. conn.close()
  28. #结果如下
  29. {'id': 1, 'username': 'mjj', 'pwd': '123'}
  30. {'id': 3, 'username': '张三', 'pwd': '110'}
  31. {'id': 3, 'username': '张三', 'pwd': '110'}
  32. {'id': 1, 'username': 'mjj', 'pwd': '123'}

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号