pymysql模块的使用

一、连接MySQL服务器
import pymysql

# 连接数据库,调用Connect函数(Connect函数会返回Connection的一个对象)
conn = pymysql.Connect(host='localhost',        #主机ip
                             port=3306,         #端口
                             user='user',       #用户名
                             password='passwd', #密码
                             database='db',     #数据库名称
                             charset='utf8',    #字符集
                            )

二、对数据库进行操作(增删改查)
mysql> select * from userinfo;
+----+-------+------+
| id | name  | pwd  |
+----+-------+------+
|  1 | sssss | 123  |
|  2 | abc   | 233  |
+----+-------+------+
1.查询(模拟用户登录)
username = input('请输入用户名:')
pwd = input('请输入密码:')
#书写要执行的SQL语句(字符串形式,注意单双引号的使用)
sql = 'select * from userinfo where name="%s" and pwd="%s"'%(username,pwd)
cur = conn.cursor()     #调用cursor方法,该方法会返回一个Cursor对象
cur.execute(sql) #调用execute方法执行sql语句 (如果执行成功,这里会返回查询结果数)
cur.close()      #关闭
conn.close()

#上述的sql语句存在“漏洞”,如果username输入: xx" or 1=1 -- xxx,这样的骚操作,就可以使用错误的username 并跳过密码,因为相当于执行了select * from userinfo where name=" xx" or 1=1 -- xxx" and pwd="这里随意"这样的语句,1=1是始终成立的,而1=1之后被注释掉了。

username = input('请输入用户名:')
pwd = input('请输入密码:')
sql = 'select * from userinfo where name=%(name)s and pwd=%(pwd)s'
cur.execute(sql,{'name':username,'pwd':pwd}) #防注释处理
cur.close()     
conn.close()
2.增删改
mysql> select * from userinfo;
+----+--------+------+
| id | name   | pwd  |
+----+--------+------+
|  1 | Sroxi  | 123  |
|  2 | abc    | 233  |
|  3 | QaQ    | 306  |
|  4 | Violet | 520  |
+----+--------+------+
#增
cur = conn.cursor()
sql = 'insert into userinfo(username,pwd) valuses(%s,%s)'
cur.execute(sql,(username,pwd))
#cur.executemany(sql,[(username1,pwd1),(username2,pwd2)]) #一次插入多条数据
#改
sql = 'update userinfo set name = %s where id = 1'
cur.execute(sql,username)
#删 
sql = 'delete from userinfo where id = 2'
cursor.execute(sql)



conn.commit() #执行增删改等操作后一定要commit,否则操作无效
cursor.close()
conn.close()
3.查:fetchone()、fetchmany()、fetchall()和scroll()

在使用这三个方法之前必须先使用execute(),否则 raise err.ProgrammingError("execute() first"),并且执型的是select语句,它们只能从select 查询得到的临时表中查找。

  1. ​ fetchone()查询一条记录,并将游标移动到下一行
  2. ​ fetchall()查询所有数据
  3. ​ fetchmany(N)查询N条数据
  4. ​ scroll(value,mode) 移动游标,负值mode ;可以是'relative'或‘absolute’
3.1fetchone()和fetchall()
#默认情况下,我们获取到的返回值是元组,只能看到每行的数据,却不知道每一列代表的是什么,这个时候可以使用以下方式来返回字典,每一行的数据都会生成一个字典:
cur = conn.cursor(cursor=pymysql.cursors.DictCursor)
sql = 'select * from userinfo '
cur.execute(sql)
row = cur.fetchone() 
print(row)
row1 = cur.fetchone()
print(row1)
row2 = cur.fetchall()
print(row2)

打印结果:
{'id': 1, 'name': 'Sroxi', 'pwd': '123'}
{'id': 2, 'name': 'abc', 'pwd': '233'}
[{'id': 3, 'name': 'QaQ', 'pwd': '306'}, {'id': 4, 'name': 'Violet', 'pwd': '520'}]
3.2fetchmany()和scroll()
cur.scroll(-2,'relative')  #负值向上移动,'relative'表示当前位置,absolute()表示起始位置
row3 = cur.fetchmany(2) #读取两条记录
print(row3)

转载于:https://www.cnblogs.com/notfind/p/11413198.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值