Python模块之pymysql使用

作者: ropon 分类: Python 发布时间: 2018-11-18 20:14
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/11/17 11:28
# @Author  : Ropon
# @File    : 55_01_pymysql.py

import pymysql

# user = input('请输入用户名:')
# pwd = input('请输入密码:')

# 创建连接
conn = pymysql.connect(
    host='x.x.x.x',
    port=3306, user='xxx',
    password='xxx',
    db = 'testdb1',
    charset='utf8')

# 创建游标
# cursor = conn.cursor()
# 默认情况下,获取返回的值是元组,只能看到每行的数据,但不知每一列的含义
# 可以使用以下方式返回字典,每一行的数据会生成一个字典
# 在实例化的时候,将属性cursor设置为pymysql.cursors.DictCursor
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

# 编写sql语句
# sql = "select * from userinfo where user='{0}' and passwd='{1}'".format(user, pwd)
# sql = "select * from userinfo where user=%s and passwd=%s"
# print(sql)

# 执行sql语句
# cursor.execute(sql)
# result = cursor.execute(sql)
# print(result)

# result = cursor.execute(sql, [user, pwd])

# if result:
#     print('登录成功')
# else:
#     print('登录失败')

# sql注入
# sql语句中 -- 表示注释的意思
# 1、用户名存在,绕过密码
# ropon' -- test
# 2、用户名不存在,绕过密码
# xxx' or 2=2 -- renyi

# 解决方案
# 原来我们采用字符串拼接方式执行sql语句
# sql = "select * from userinfo where user='{0}' and passwd='{1}'".format(user, pwd)
# 现在改写为execute帮我们做字符串拼接,而且%s不能在加引号
# sql = "select * from userinfo where user=%s and passwd=%s"
# result = cursor.execute(sql, [user, pwd])

# 增、删、改 conn.commit()

# 增
# sql = "insert into userinfo(user,passwd) values(%s, %s)"
# insert_result = cursor.execute(sql,(user, pwd))
# 同时插入多条数据
# insert_result = cursor.executemany(sql, [('zhangsan', '123'), ('lisi', '234')])
# print(insert_result)

# 删
# sql ="delete from userinfo where user=%s"
# user1 = 'lisi'
# delete_result = cursor.execute(sql,user1)
# print(delete_result)

# 改
# sql = "update userinfo set passwd = %s where user = %s"
# newpasswd = '12345678'
# user2 = 'ropon'
# update_result = cursor.execute(sql, (newpasswd, user2))
# print(update_result)

# 查
sql = "select * from userinfo"
select_result = cursor.execute(sql)
# print(select_result)

# 获取下一行数据,第一次为首行
# fetchone()
# cursor.scroll(2,mode='absolute')
# d1 = cursor.fetchone()
# print(d1)
#
# d1 = cursor.fetchone()
# print(d1)
# cursor.scroll(1, mode='relative')

# d1 = cursor.fetchone()
# print(d1)

# fetchone 在获取行数据时,可以这么理解,开始有一个行指针指着第一行的上方
# 获取一行,它就向下移动一行,所以当指针到最后一行,就不能在获取行的内容
# 可以借助scroll方法移动行指针
# 相对当前位置移动,第一值移动的行数,正数向下移动,负数向上移动
# cursor.scroll(1, mode='relative')

# 绝对位置移动(基于首行移动),第一值移动的行数,正数向下移动,负数向上移动
# cursor.scroll(2,mode='absolute')

# 获取所有行数据
# fetchall
# d2 = cursor.fetchall()
# print(d2)

# 获取多少行数据
# fetchmany(2)
# d3 = cursor.fetchmany(2)
# print(d3)

# 提交保存
conn.commit()

# 关闭游标和连接
cursor.close()
conn.close()

 

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!