pymysql的下载和使用

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

  Python程序中操作数据库.

  pymysql模块的下载:

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

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

  

  实现:

#导入模块
import pymysql username = input('请输入用户名:')
password = input('请输入密码:') #创建连接
conn = pymysql.connect(
host = '127.0.0.1',
user = 'root',
database = 'db1',
port = 3306,
charset = 'utf8'
)
#创建游标
cur = conn.cursor()
sql = 'select * from login where name = "%s" and password = %s ' %(username,password)
#注意 name 在创建的表中未vachar类型 ,所以必选要加 "" .
print(sql) rescount = cur.execute(sql)#执行sql语句,返回sql查询成功的记录数目
print(rescount) if rescount:
print('成功')
else:
print('失败')
#关闭连接,游标
cur.close()
conn.close

  注意 : -- + 空格 为注释

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

  

  正确解决方法为:

#导入模块
import pymysql username = input('请输入用户名:')
password = input('请输入密码:') #创建连接
conn = pymysql.connect(
host = '127.0.0.1',
user = 'root',
database = 'db1',
port = 3306,
charset = 'utf8'
)
#创建游标
cur = conn.cursor()
sql = 'select * from login where name = %s and password = %s '
#注意 name 在此时不能再加 "" .
print(sql) rescount = cur.execute(sql,[username,password])
#由我们对sql进行字符串拼接改为execute帮我们做字符串拼接,可以是列表 元祖 字典.pymysql模块自动帮我们解决sql注入问题.
print(rescount) if rescount:
print('成功')
else:
print('失败')
#关闭
cur.close()
conn.close

  注意:当为字典时:

增 删 改 (conn.commit())

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

import pymysql
username = input('请输入用户名:') pwd = input('请输入密码:') # 1.连接
conn = pymysql.connect(host='localhost', port=3306, user='root', password='', db='db1', charset='utf8') # 2.创建游标
cursor = conn.cursor() # 操作
# 增
# sql = "insert into userinfo(username,password) values (%s,%s)" # effect_row = cursor.execute(sql,(username,password))
#同时插入多条数据
#cursor.executemany(sql,[('李四','110'),('王五','119')]) # print(effect_row)# # 改
# sql = "update userinfo set username = %s where id = 2"
# effect_row = cursor.execute(sql,username)
# print(effect_row) # 删
sql = "delete from userinfo where id = 2"
effect_row = cursor.execute(sql)
print(effect_row) #一定记得commit
conn.commit() # 4.关闭游标
cursor.close() # 5.关闭连接
conn.close()

查  fetchone , fetchmany , fetchall

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

  查看一下表内容:

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

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

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

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

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

 

最新文章

  1. python之常用内置函数
  2. vue.js 学习笔记
  3. Google Chrome Frame 自定义渲染方式,调用ActiveX
  4. RMAN连接数据库
  5. IntelliJ IDEA安装lombok插件
  6. DP最长递增字符串
  7. dwr与ssh框架整合教程
  8. 14)Java中Assert
  9. SB集中营
  10. uva 12100 Printer Queue 优先级队列模拟题 数组模拟队列
  11. React事件处理函数的bind复用和name复用
  12. Invalid segment BIN$xxx and dba_recyclebin was empty (回收站空,释放无效的BIN$xx空间)
  13. 2017 Multi-University Training Contest - Team 1 1002&&HDU 6034 Balala Power!【字符串,贪心+排序】
  14. gulp填坑记(一)
  15. vscode断点调试工程化客户端文件
  16. Machine Learning, Homework 9, Neural Nets
  17. @EnableWebMvc
  18. Failed to start Vsftpd ftp daemon错误
  19. _equipment
  20. 在商城系统中使用设计模式----简单工厂模式之在springboot中使用简单工厂模式

热门文章

  1. Python3.x 安装Scrapy框架
  2. Ngnix学习
  3. RESTful架构及SOA架构简单解析
  4. js函数 标签: javascript 2016-08-12 16:48 56人阅读 评论(0) 收藏
  5. linux配置sudo
  6. scanf函数读取缓冲区数据的问题
  7. Struts2.3.4.1 + Spring3.1.2 + Hibernate4.1.6整合
  8. 快速搭建一个SSM框架demo
  9. Oracle中的rownum不能使用大于>的问题
  10. [19/04/06-星期六] 多线程_静态代理(StaticProxy)和 lamda (简化代码,jdk8新增)