mysql 5.5 python_5.python 操作 MySQL

python 操作 MySQL

1.基本语法

# python操作MySQL

import pymysql #需要先安装pymysql

# 1.基本语法

# (1)连接数据库,创建连接对象

conn = pymysql.connect(host="127.0.0.1",user="root",password="123456",database="lianxi104",charset="utf8",port=3306)

# (2) 创建游标对象(用来做增删改查 MySQL操作)

# cursor = conn.cursor()

# 设置查询返回的数据为字典,默认是元组

cursor = conn.cursor(cursor = pymysql.cursors.DictCursor)

# (3)执行sql语句

sql = "select * from t1"

res = cursor.execute(sql)

print(res) # 返回的是查询的条数

# (4) 获取数据

"""

fetchone 获取一条数据

"""

res = cursor.fetchone()

print(res) # 返回元组(2, '熊二')

res = cursor.fetchone() # 类似迭代器

print(res) # 返回字典 {'id': 1, 'name': '熊大'}

# (5)释放游标对象

cursor.close()

# (6)释放连接对象

conn.close()

2.创建删除表操作 与 事务处理

# 1. 创建删除表相关操作

import pymysql

conn = pymysql.connect(host="127.0.0.1",user = "root",password = "123456",database = "lianxi104", charset = "utf8",port = 3306)

cursor = conn.cursor(cursor = pymysql.cursors.DictCursor)

# 创建表

sql = """

create table t2 (

id int,

name varchar(222)

)

"""

cursor.execute(sql)

# 查看表结构

sql = "desc t2"

res = cursor.execute(sql)

print(res) # 返回的是字段个数

res = cursor.fetchone()

print(res)

# 删除表

sql = "drop table t2"

res = cursor.execute(sql)

print(res) # 创建删除表的返回值没有意义

# 关闭游标连接对象

cursor.close()

conn.close()

# 2.事务处理 (提交,回滚)

conn = pymysql.connect(host="127.0.0.1",user="root",password="123456",database="lianxi104")

cursor = conn.cursor()

sql1 = "begin"

sql2 = "insert into t1 values(null,'好人')"

sql3 = "commit"

cursor.execute(sql1)

cursor.execute(sql2)

cursor.execute(sql3)

cursor.close()

conn.close()

3.python 操作 MySQL 增删改查

# python 操作 MySQL 增删改查

import pymysql

# 连接数据库

conn = pymysql.connect(host="127.0.0.1",user="root",password="123456",database="lianxi104")

cursor = conn.cursor(cursor = pymysql.cursors.DictCursor)

"""

pymysql 操作数据库时(增删改),默认开启事务处理(增删改)

必须调用commit提交数据,才会真正的去操作数据库

语法: conn.commit()

"""

# 一: 增

sql = "insert into t1(name) values (%s)"

# 1.插入一条数据

res = cursor.execute(sql,("熊大"))

print(res) # 返回的是插入几条数据

print(cursor.lastrowid) # 最后一行数据的索引

# 2.一次插入多条数据 :executemany (列表里放元组)

res = cursor.executemany(sql,[("熊二"),("光头强"),("吉吉国王")])

print(res)

print(cursor.lastrowid)

# 二 : 删

"""删除一条或多条(与插入多条数据一样)"""

sql = "delete from t1 where name = %s"

res = cursor.execute(sql,("熊二"))

print(res) # 返回删除几条数据

# 三 : 改

"""更改一条或多条(与插入多条数据一样)"""

sql = "update t1 set name = %s where id = %s"

res = cursor.execute(sql,("大林子",1))

print(res) # 返回更新了几条数据

# 四 : 查

# 1. 整除查询

"""

fetchone() 查询一条数据

fetchmany(n) 查询n条数据

fetchall() 查询所有数据

"""

sql = "select * from t1"

res = cursor.execute(sql)

print(res) # 返回查询了多少条数据

# (1).fetchone 查询一条数据

res = cursor.fetchone() #相当迭代器一样查看数据

print(res)

res = cursor.fetchone()

print(res)

# (2).fetchmany 查询多条数据

res = cursor.fetchmany(4)

print(res)

# (3).fetchall 查看所有数据

"""

res = cursor.fetchall()

print(res)

"""

# 2. scroll : 滚动查询,调整查询位置

# (1) 相对滚动 relative

"""相对于上一条数据向下滚动n个位置 , 整数"""

cursor.scroll(4,mode="relative")

res = cursor.fetchone() # 查询下一条数据

print(res)

"""相对于上一条数据向上滚动n个位置 , 负数"""

cursor.scroll(-5,mode="relative")

res = cursor.fetchone() # 查询下一条数据

print(res)

# (2) 绝对滚动 absolute

"""永远从头开始, 0代表第一条数据, 不能为负数"""

cursor.scroll(0,mode="absolute")

res = cursor.fetchone()

print(res)

conn.commit()

cursor.close()

conn.close()

4.mysql 注入攻击

# sql 注入攻击

import pymysql

user = input("请输入您的账号:")

pwd = input("请输入您的密码:")

#连接数据库

conn = pymysql.connect(host="127.0.0.1", user ="root" , password="123456",database="lianxi104")

cursor = conn.cursor(cursor = pymysql.cursors.DictCursor)

# 1.注入攻击

"""

实现: 不知道账号密码也可以登陆

账号: sdfsdfsdf' or 5=5 -- adfa 密码: 随便写

-- 在sql中代表的注释的含义,可以把密码注释掉

"""

sql = "select * from zrgj where name = '%s' and pwd = '%s'"%(user,pwd)

print(sql)

res = cursor.execute(sql)

print("登陆成功~" if res else "登陆失败~")

# 2.解决方案: 预处理机机制

"""

在执行sql语句之前,提前对sql中的符号进行过滤优化,避免sql注入攻击

execute(sql,(参数1,参数2,参数3))

"""

sql = "select * from zrgj where name = %s and pwd = %s"

print(sql)

res = cursor.execute(sql,(user,pwd))

print("登陆成功~" if res else "登陆失败~")

cursor.close()

conn.close()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值