pymsql的使用

初识pymysql模块

先在数据库中创建一个用户信息表,里面包含用户的ID、用户名、密码

create table userinfo(
uid int not null auto_increment primary key,
username varchar(32),
pwd varchar(32)
)engine = innodb default charset=utf8;

增加一个用户的信息:

insert into userinfo(username,pwd) values('jxson','a123');

用pymysql模块从数据库拿到用户信息模拟登陆效果:

import pymysql
user = input('username:') #输入用户的名字
pwd = input('password:') #输入用户的密码
conn = pymysql.connect(host ='localhost',user = 'root',password = '',database = 'db1') #连接数据库
cursor = conn.cursor() #cursor是一个游标 去帮我们获取数据
sql_search = "select * from userinfo where username='%s' and pwd='%s'" %(user,pwd,) #SQL语句
cursor.execute(sql_search) #执行SQL语句
get_one = cursor.fetchone() #拿一组数据
cursor.close() #关闭游标
conn.close() #关闭连接
if get_one: #判断是否有拿到数据
print("登陆成功!")
print(get_one)
else:
print("登陆失败!")

执行结果:

username:jxson
password:a123
登陆成功!
(1, 'jxson', 'a123')

防止SQL注入的改进方法

1.

sql_search = "select * from userinfo where username=%s and pwd=%s"
cursor.execute(sql_search,user,pwd)

2.列表的表示方式

sql_search = "select * from userinfo where username=%s and pwd=%s"
cursor.execute(sql_search,[user,pwd])

3.字典的表示方式

sql_search = "select * from userinfo where username=%(u)s and pwd=%(p)s"
cursor.execute(sql_search,{'u' : user,'p' : pwd})

 增、删、改、查

增、删、改:

增、删、改都需要commit(),以增为举例

增加单个

import pymysql
conn = pymysql.connect(host ='localhost',user = 'root',password = '',database = 'db1')
cursor = conn.cursor()
sql_insert = "insert into userinfo(username,pwd) values('abc','666')"
cursor.execute(sql_insert)
conn.commit()
cursor.close()
conn.close()

增加多个:

import pymysql
conn = pymysql.connect(host ='localhost',user = 'root',password = '',database = 'db1')
cursor = conn.cursor()
sql_insert = "insert into userinfo(username,pwd) values(%s,%s)"
cursor.executemany(sql_insert,[('hylisang','a123'),('HSI15','47a8'),('asw2','')])
conn.commit()
cursor.close()
conn.close()

output:

查:

1.fetchone()

import pymysql
conn = pymysql.connect(host ='localhost',user = 'root',password = '',database = 'db1')
cursor = conn.cursor()
sql = "select * from userinfo"
cursor.execute(sql)
result1 = cursor.fetchone()
print(result1)
result2 = cursor.fetchone()
print(result2)
cursor.close()
conn.close()

执行结果:

(1, 'jxson', 'a123')
(6, 'abc', '')

2.fetchmany(n),一次取n条数据

import pymysql
conn = pymysql.connect(host ='localhost',user = 'root',password = '',database = 'db1')
cursor = conn.cursor()
sql = "select * from userinfo"
cursor.execute(sql)
result1 = cursor.fetchmany(3)
print(result1)
cursor.close()
conn.close()

执行结果:

((1, 'jxson', 'a123'), (6, 'abc', ''), (7, 'hylisang', 'a123'))

3.fetchall(),一次取全部SQL语句查到的数据

import pymysql
conn = pymysql.connect(host ='localhost',user = 'root',password = '',database = 'db1')
cursor = conn.cursor()
sql = "select * from userinfo"
cursor.execute(sql)
result1 = cursor.fetchall()
print(result1)
cursor.close()
conn.close()

执行结果:

((1, 'jxson', 'a123'), (6, 'abc', ''), (7, 'hylisang', 'a123'), (8, 'HSI15', '47a8'), (9, 'asw2', ''))

把结果转化为字典的格式:

import pymysql
conn = pymysql.connect(host ='localhost',user = 'root',password = '',database = 'db1')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
sql = "select * from userinfo"
cursor.execute(sql)
result1 = cursor.fetchall()
print(result1)
cursor.close()
conn.close()

执行结果:

[{'uid': 1, 'username': 'jxson', 'pwd': 'a123'}, {'uid': 6, 'username': 'abc', 'pwd': ''}, {'uid': 7, 'username': 'hylisang', 'pwd': 'a123'},
{'uid': 8, 'username': 'HSI15', 'pwd': '47a8'}, {'uid': 9, 'username': 'asw2', 'pwd': ''}]

4.控制游标来获取数据

cursor.scroll(1,mode='relative')                                #根据当前位置相对位移
cursor.scroll(2,mode='absolute')                             #绝对位置移动

查看新插入数据的自增ID

如果添加多笔数据再去查询,那查到的ID是最后一条

import pymysql
conn = pymysql.connect(host ='localhost',user = 'root',password = '',database = 'db1')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
sql_insert = "insert into userinfo(username,pwd) values('abc','666')"
cursor.execute(sql_insert)
print(cursor.lastrowid)
conn.commit()
cursor.close()
conn.close()

Python学习日记(三十七) Mysql数据库篇 五的更多相关文章

  1. Python学习日记(三十三) Mysql数据库篇 一

    背景 Mysql是一个关系型数据库,由瑞典Mysql AB开发,目前属于Oracle旗下的产品.Mysql是目前最流行的关系型数据库管理系统之一,在WEB方面,Mysql是最好的RDBMS(Relat ...

  2. Python学习日记(四十) Mysql数据库篇 八

    Mysql存储过程 存储过程是保存在Mysql上的一个别名(就是一堆SQL语句),使用别名就可以查到结果不用再去写SQL语句.存储过程用于替代程序员写SQL语句. 创建存储过程 delimiter / ...

  3. Python学习日记(四十一) Mysql数据库篇 九

    前言 索引的主要作用是起到约束和加速查找,ORM框架(sqlalchemy)是用类和对象对数据库进行操作 索引的种类 按种类去分 1.普通索引:能够加速查找 2.主键索引:能够加速查找.不能为空.不能 ...

  4. Python学习日记(三十六) Mysql数据库篇 四

    MySQL作业分析 五张表的增删改查: 完成所有表的关系创建 创建教师表(tid为这张表教师ID,tname为这张表教师的姓名) create table teacherTable( tid int ...

  5. Python学习笔记9-Python 链接MySql数据库

    Python 链接MySql数据库,方法很简单: 首先需要先 安装一个MySql链接插件:MySQL-python-1.2.3.win-amd64-py2.7.exe 下载地址:http://dev. ...

  6. python学习笔记之——操作mysql数据库

    Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: ...

  7. Python学习日记(三十八) Mysql数据库篇 六

    Mysql视图 假设执行100条SQL语句时,里面都存在一条相同的语句,那我们可以把这条语句单独拿出来变成一个'临时表',也就是视图可以用来查询. 创建视图: CREATE VIEW passtvie ...

  8. Python学习日记(三十九) Mysql数据库篇 七

    Mysql函数 高级函数 1.BIN(N) 返回N的二进制编码 ); 执行结果: 2.BINARY(str) 将字符串str转换为二进制字符串 select BINARY('ASCII'); 执行结果 ...

  9. Python学习日记(三十五) Mysql数据库篇 三

    使用Navicate 创建一个连接去使用Mysql的数据库,连接名可以取任意字符但是要有意义 新增一个数据库 填写新数据库名,设置它的字符集和排序规则 新建一个表 增加表中的信息 点击保存再去输入表名 ...

随机推荐

  1. 使用Java将搜狗词库文件(文件后缀为.scel)转为.txt文件

    要做一个根据词库进行筛选主要词汇的功能,去搜狗下载专业词汇词库时,发现是.scel文件,且通过转换工具(http://tools.bugscaner.com/sceltotxt/)转换为txt时报错如 ...

  2. tcp & 长连接 短连接

    参考文档: tcp协议 http://blog.chinaunix.net/uid-26833883-id-3627644.html 长连接和短连接 http://blog.csdn.net/free ...

  3. ASP.NET之MVC 微信公众号授权给第三方平台的技术实现流程(获取第三方平台access_token)

    “出于安全考虑,在第三方平台创建审核通过后,微信服务器每隔10分钟会向第三方的消息接收地址推送一次component_verify_ticket,用于获取第三方平台接口调用凭据”.这是文档中的原话,也 ...

  4. gcc O2优化选项对内嵌汇编以及函数递归调用的影响

    学习和使用c这些年来,很多方面都未深入研究过,就如脱离了IDE后,我可能连编译一个c文件的命令都写不出来. 最近需要在c中内嵌汇编解决问题,参考网上相关的资料写了一段汇编代码,在测试的时候时好时坏,找 ...

  5. 由一个问题引起的思考:WEB开发中,使用JSON-RPC好,还是RESTful API好?

    起因: 研究zabbix的API设计风格.查看zabbix官网API文档,可以看到使用的是json-rpc:2.0 随后搜索到知乎上的一个问题讨论:https://www.zhihu.com/ques ...

  6. Lua table的remove函数

    [1]remove函数简介 table.remove(table, pos): 返回table数组中位于pos位置的元素,其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元 ...

  7. IIS 10 PHP 运行环境

    1.下载php for windows  解压到指定目录 https://windows.php.net/download/ 2.安装iis 勾选CGI 3  ,处理映射 4.添加测试站点测试是否已经 ...

  8. MIME类型对应表:

    MIME类型对应表: 常用MIME类型: 扩展名 MIME类型 .iso ISO File .rar application/x-rar-compressed .zip application/zip ...

  9. FusionInsight大数据开发学习总结(1)

    FusionInsight大数据开发 FusionInsight HD是一个大数据全栈商用平台,支持各种通用大数据应用场景. 技能需求 扎实的编程基础 Java/Scala/python/SQL/sh ...

  10. 【leetcode-49】字母异位词分组

    给定一个字符串数组,将字母异位词组合在一起.字母异位词指字母相同,但排列不同的字符串. 示例: 输入: ["eat", "tea", "tan&quo ...