2-1.python操作MySQL
目录
- 模块基本使用
- sql注入问题
- autocommit 二次确认
- executemany
python 胶水语言、调包侠(贬义词>>>褒义词)
"""
python这门语言本身并不牛逼 牛逼的是支持该语言的各种功能强大的模块、软件
"""
# 后期在使用python编程的时候 很多看似比较复杂功能可能都已经有相应的模块
模块名字 pymysql
下载模块
1.命令行
pip3 install pymysql
pip3 install pymysql -i 源地址
2.借助于pycharm
3.python解释器配置文件
模块基本使用
#导入数据库模块
import pymysql
#创建链接
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123456',
database='db03',
charset='utf8'
)
# 生成游标对象
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让数据自动组织成字典
# 定义SQL语句
sql = 'select * from userinfo'
# 执行SQL语句
cursor.execute(sql)
# 获取返回结果
res = cursor.fetchall()
print(res)
cursor.scroll()#光标的移动
relative # 相对当前位置移动
absolute # 相对数据开头位置移动
#fetchall()获取所有的结果 列表套字典
#fetchone()获取结果集第一个结果 数据字典
#fetchmany()括号内可以指定获取几个结果集 列表套字典
#上述方法对数据的获取也存在光标的概念
sql注入问题
#sql 注入 而是针对程序员编写时的疏忽,是通过一些特殊的字符,通过SQL语句,实现无账号登录,甚至篡改数据库
#导入数据库模块
import pymysql
#创建链接
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123456',
database='db03',
charset='utf8'
)
# 生成一个游标对象
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让数据自动组织成字典
# 获取用户名和密码
username = input('username>>>:').strip()
password = input('password>>>:').strip()
# 构造SQL语句
sql = "select * from userinfo where name='%s' and password='%s'"%(username,password)
# 容易别sql注入
print(sql)
# 执行SQL语句
cursor.execute(sql)
# 获取返回结果
res = cursor.fetchall()
#登录判断
if res:
print(res)
print('登录成功')
else:
print('用户名或密码错误')
F:\python39\python.exe F:/Desktop/py/python项目/01mysql数据库/day01.py
username>>>:user1' -- aaaaaaaaaaaa
password>>>:
select * from userinfo where username='user1' -- aaaaaaaaaaaa' and password=''
[{'id': 1, 'username': 'user1 ', 'password': '123456'}]
登录成功
Process finished with exit code 0
F:\python39\python.exe F:/Desktop/py/python项目/01mysql数据库/day01.py
username>>>:aaaaaaa' or 1=1 -- aaaaa
password>>>:
select * from userinfo where username='aaaaaaa' or 1=1 -- aaaaa' and password=''
[{'id': 1, 'username': 'user1 ', 'password': '123456'}]
登录成功
Process finished with exit code 0
针对核心数据 不要自己拼接 交由execute方法帮你筛选再拼接
#导入数据库模块
import pymysql
#创建链接
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123456',
database='db03',
charset='utf8'
)
# 生成一个游标对象
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让数据自动组织成字典
# 获取用户名和密码
username = input('username>>>:').strip()
password = input('password>>>:').strip()
# 构造SQL语句
# 针对核心数据 不要自己拼接 交由execute方法帮你筛选再拼接
sql = "select * from userinfo where name=%s and password=%s"
print(sql)
# 执行SQL语句
cursor.execute(sql,(username,password))
res = cursor.fetchall()
if res:
print(res)
print('登录成功')
else:
print('用户名或密码错误')
"""
登录功能
1.获取用户名和密码
2.基于用户名和密码直接精准查找
"""
"""
SQL注入问题的产生
就是通过一些特殊符号的组合 达到某些特定的效果从而避免常规的逻辑
SQL注入问题如何解决
execute方法自动帮你解决
"""
autocommit 二次确认
# 1.查询语句可以正常执行并获取结果
cursor.execute(sql1)
# 2.插入语句能够执行 但是并没有影响表数据
cursor.execute(sql2,('user222222','666'))
# 3.更新语句能够执行 但是并没有影响表数据
res = cursor.execute(sql3)
print(res)
# 4.删除语句能够执行 但是并没有影响表数据
res = cursor.execute(sql4)
print(res)
'''针对增删改操作 需要二次确认才可生效'''
cursor.execute(sql2,('user111111','666'))
conn.commit()
cursor.execute(sql3)
conn.commit()
cursor.execute(sql4)
conn.commit()
# 创建链接
conn = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='123',
database='db_5',
charset='utf8',
autocommit=True # 涉及到增删改 自动二次确认
)
executemany
sql2 = 'insert into userinfo(name,password) values(%s,%s)'
cursor.executemany(sql2,[('user2','123'),('user3','321'),('user4','222')]) #插入多条数据