前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库-part3-pymysql模块操作数数据库

数据库-part3-pymysql模块操作数数据库

原创
作者头像
少年包青菜
修改2019-09-16 18:09:57
4830
修改2019-09-16 18:09:57
举报
文章被收录于专栏:Python 学习Python 学习

1.关于sql注入★★★★★

代码语言:javascript
复制
import pymysql

'''
pymysql接收几个参数用来连接数据库
'''
connection = pymysql.connect(
    host='localhost',
    user='root',
    password='root',
    database='db1',
    port=3306,
)

'''
创建一个游标,类似文件指针
'''
cur = connection.cursor()  #

username = input('please input your name:')
pwd = input('please input your password:')
sql = "select * from userinfo where name='%s' and pwd='%s';" % (username, pwd)
print(sql)
resCount = cur.execute(sql)
print(resCount)
if resCount:  # 顺利执行这个 sql ,就是 True , 数据库里面有这个用户名
    print('login success')
else:  # 否则就是 False
    print('login fail')
cur.close()  # 用完一定要关闭!
connection.close()  # 用完一定要关闭连接,否则大的数据量的时候,会卡死数据库
'''
但是有一个致命的危机!!
sql注入:
当用户名字输入: alex' -- XXX,把sql拼接,后半段成注释的时候,
也会查询成功,这样就避免了后台对于密码的校验
'''

2.标准查询方式(避免SQL注入)

代码语言:javascript
复制
import pymysql

connection = pymysql.connect(
    host='localhost',
    user='root',
    password='root',
    database='db1',
    port=3306,
)

'''
创建一个游标,类似文件指针
'''
cur = connection.cursor()  #

username = input('please input your name:')
pwd = input('please input your password:')

'''
使用如下方法可避免 sql 注入 ★★★★★
'''

sql = "select * from userinfo where name=%(username)s and pwd=%(password)s;"
print(sql)
resCount = cur.execute(sql, {'username': username, 'password': pwd})
print(resCount)
if resCount:
    print('login success')
else:
    print('login fail')
cur.close()
connection.close()

3.数据库的插入操作

代码语言:javascript
复制
import pymysql

connection = pymysql.connect(
    host='localhost',
    user='root',
    password='root',
    database='db1',
    port=3306,
    charset='utf8'
)

cur = connection.cursor()

sql = "insert into userinfo(name, pwd) values (%(username)s,%(password)s);"
username = input('please input your name:')
password = input('please input your password:')

resCount = cur.execute(sql, {"username": username, "password": password})
connection.commit()  # 插入一定要 commit()
print(resCount)
print(sql)

connection.close()
cur.close()

4.查询数据库的进阶(用的最多的模块及方法)

代码语言:javascript
复制
import pymysql

connection = pymysql.connect(
    host='localhost',
    user='root',
    password='root',
    database='db1',
    port=3306,
)

cur = connection.cursor(cursor=pymysql.cursors.DictCursor)  # 以字典的形式返回

sql = "select * from userinfo"

resCount = cur.execute(sql)

print(resCount)  # 返回查询到的行数-1

# row = cur.fetchone()  # 打印第一行,cur<游标>执行 .fetchone() 方法,打出当前游标所在行
# print(row)
# row = cur.fetchone()  # 打印第二行
# print(row)
# row = cur.fetchone()  # 打印第三行
# print(row)


# rows = cur.fetchmany(5)  # 将当前数据库里面所有的数据前5条以单条字典的形式放在列表内全部返回
# print(rows)

# rows = cur.fetchall()  # 将当前数据库里面所有的数据以单条字典的形式放在列表内全部返回
# print(rows)

# row = cur.fetchone()
# print(row)
# row = cur.fetchone()
# print(row)
# cur.scroll(1, mode='relative')  # 相对于自己当前的位置向下跳一行,可以是负数,向上
# row = cur.fetchone()
# print(row)
# row = cur.fetchone()
# print(row)
# row = cur.fetchone()
# print(row)

row = cur.fetchone()
print(row)
row = cur.fetchone()
print(row)
cur.scroll(0, mode='absolute')  # 游标相对于起始位置
row = cur.fetchone()
print(row)
row = cur.fetchone()
print(row)
row = cur.fetchone()
print(row)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.关于sql注入★★★★★
  • 2.标准查询方式(避免SQL注入)
  • 3.数据库的插入操作
  • 4.查询数据库的进阶(用的最多的模块及方法)
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档