数据库 - mysql (个人学习笔记)--pymysql基础操作

一、基本语句作用了解

import pymysql

#创建连接
conn = pymysql.connect(	
    host = '127.0.0.1',	#地址
    port = 3306,	#端口号
    user = 'ChengJiang_09',	#账户
    passwd = '123',	#密码
    db = 'student',	#数据库名称
    charset = 'utf8')	#字符集编码

#创建游标
cursor = conn.cursor()

r = cursor.execute('insert into student_list(name) values("t9om")')	#执行mysql功能语句,并返回受语句影响的表内数据的行数。r:此时接收到整数 1。

conn.commit()

cursor.close()
conn.close()

二、动态数据修改(两种方法)

1.字符串拼接sql语句 ( 禁止使用 ,原因见该部分末尾)

import pymysql

conn = pymysql.connect(
    host = '127.0.0.1',
    port = 3306,
    user = 'ChengJiang_09',
    passwd = '123',
    db = 'student',
    charset = 'utf8')

cursor = conn.cursor()

inp = input("请输入插入内容:")
sql = 'insert into student_list(name) values("%s")'%(inp,)

cursor.execute(sql)
conn.commit()

cursor.close()
conn.close()

①.字符串拼接bug(sql注入问题)

举例:
利用查询语句,简单模拟用户登录界面,即输入正确的账户和密码,取得相应信息

例表:
在这里插入图片描述

import pymysql

conn = pymysql.connect(
    host = '127.0.0.1',
    port = 3306,
    user = 'ChengJiang_09',
    passwd = '123',
    db = 'student',
    charset = 'utf8')

cursor = conn.cursor()

inp = input("请输入账户:")
inp2 = input("请输入密码:")
sql = 'select user_name,user_passwd from user_list3 where user_name="%s" and user_passwd="%s"'%(inp,inp2)
cursor.execute(sql)

result = cursor.fetchone()
print(result)


conn.commit()

cursor.close()
conn.close()

案例:

在这里插入图片描述
账户与密码不匹配,输出none
在这里插入图片描述

账户与密码匹配,正确输出


接下来查看问题所在:
在这里插入图片描述
此时,虽然密码错误,但是依然成功取出对应的数据*

原因:sql语句中 - - 作用:注释

当账户输入 ‘ “- - ’ 时

sql = 'select user_name,user_passwd from user_list3 where user_name="user1" -- " and user_passwd="%s"'
#此时 -- 后方的 " and user_passwd="%s" 被注释,将不再作为代码执行,所以无论输入任何密码都能成功取出改行内容

以上为存在user1账户,如果不存在
在这里插入图片描述
输入 “ or 1=1 - - 依然能够成功取出数据(取出全部数据,上方取出一条数据原因在于:curcor.fetchone()语句,仅取一条数据)

该问题被命名为 sql注入

2.内部传参

import pymysql

conn = pymysql.connect(
    host = '127.0.0.1',
    port = 3306,
    user = 'ChengJiang_09',
    passwd = '123',
    db = 'student',
    charset = 'utf8')

cursor = conn.cursor()

inp = input("请输入插入内容:")

#execute方法内部会自动将传入的参数替换占位符(%s),%s不加“”。
cursor.execute('insert into student_list(name) values(%s)',inp) 

conn.commit()

cursor.close()
conn.close()

三、数据增删改查

1.增

方法列表:

cursor.execute()	#传入单行

cursor.executemany() #传入多行

功能介绍:

#以下语句student表作为举例

#单行插入
cursor.execute('insert into student(name,age,hobby) values(%s,%s,%s)',('Tom',12,'girl'))  #同时传入多列数据,需要用元祖保存

#多行插入
list = [('Tom',12,'girl'),
('Tom11',13,'girls'),
('Tom22',14,'girlss'),]
cursor.executemany('insert into student(name,age,hobby) values(%s,%s,%s)',list)  #executemany将循环插入数据

2.删

#以下语句以student_list表作为举例使用
cursor.execute('delete from student_list where nid = %s',5) #删除表中nid为5的行

3.改

#以下语句以student_list表作为举例使用
cursor.execute('update student_list set name = %s where nid = %s',('sbb',12))		#将nid为12的行,的name列数据更改为 sbb

4.查

#以下语句以student_list表作为举例使用

#取所有数据
cursor.execute('select * from student_list')
result = cursor.fetchall()	#创建变量取得返回值,即表内容

#取单行数据
cursor.execute('select * from student_list')
result = cursor.fetchone()	#取得第一条数据(拥有着相当于文件读取时的,文本指针)
result = cursor.fetchone() #取得第二条数据
result = cursor.fetchone()	#取得第三天数据

#取指定行数据
result = cursor.fetchmany(3)	#取三条数据

方法列表:

cursor.fetchall()	#取所有数据

cursor.fetchone()	#取得一条数据

cursor.fetchmany()	#取指定条数据

①.修改文件指针

#修改指针的绝对位置
cursor.scroll(0,mode='absolute') 	#回到0位置

#修改指针的相对位置(负数向上,正数向下)
cursor.scroll(-1,mode='relative')  #-1:移动指针到上一个位置
cursor.scroll(1,mode='relative')   #1:移动指针到下一个位置

5.获取自增id

插入一条数据,想要取得其自增id

inp = input("请输入插入内容:")
cursor.execute('insert into student_list(name) values(%s)',inp)

nid = cursor.lastrowid		#取得该行数据自增id
#一条execute语句同时插入多行数据时,仅会取得最后一条数据自增id
print("nid = %s"%nid)

方法列表:

cursor.lastrowid #取得数据自增id
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值