import pymysql conn = pymysql.connect( host = '127.0.0.1', port = 3306, user = 'root', password = '123', database = 'db4', charset = 'utf8', ) cursor =conn.cursor(pymysql.cursors.DictCursor) # 产生一个游标对象 以字典的形式返回结果 键是表的字段 值是字段对应的信息 sql = 'select * from emp' # 要执行的sql 语句 cursor.execute(sql) # 提交信息 print(cursor.fetchone()) # 只获取一条数据 print(cursor.fetchone()) print(cursor.fetchone()) # 只获取一条数据 # print(cursor.fetchall()) # 获取所有的数据 返回的结果是一个列表 # print(cursor.fetchmany(6)) # 获取多条数据 返回的结果是一个列表 cursor.scroll(5,'absolute') # 控制光标移动 absolute相对于在起始位置 往后移动 # cursor.scroll(5,'relative') # relative相对于从当前位置往后移动几位 print(cursor.fetchall())
import pymysql conn = pymysql.connect( host = 'localhost', user = 'root', password = '123', database = 'day58', charset = 'utf8', # autocommit = True # 这个参数配置完成后 增删改操作都不需要在手动加conn.commit了 ) cursor = conn.cursor(pymysql.cursors.DictCursor) sql = 'select * from students' cursor.execute(sql) # print(cursor.fetchone()) """ 增删改操作 都必须加一句 conn.commit()操作 """ conn.commit() name = input('name>>>:').strip() class_id = input('class_id>>>:').strip() sql = "select * from students where name = '%s' and class_id = '%s'"%(name,class_id) print(sql) res = cursor.execute(sql) # execute 能够自动识别sql语句中的%s 帮你做替换 if res: print(cursor.fetchone()) else: print('用户或班级错误')
解决问题
import pymysql conn = pymysql.connect( host = 'localhost', user = 'root', password = '123', database = 'day58', charset = 'utf8', autocommit = True # # 这个参数配置完成后 增删改操作都不需要在手动加conn.commit了 ) course = conn.cursor(pymysql.cursors.DictCursor) sql = 'select * from students' # 提交 course.execute(sql) name = input('name') class_id = input('number') sql = 'select * from students where name = %s and class_id = %s' print(sql) res = course.execute(sql,(name,class_id)) # 能够帮你自动过滤特殊符号 避免sql注入的问题 if res: print(course.fetchone()) else: print('用户或班级不对') """ sql注入 就是利用注释等具有特殊意义的符号 来完成一些骚操作 后续写sql语句 不要手动拼接关键性的数据 而是让excute帮你去做拼接 """
# 增 sql = "insert into user(username,password) values(%s,%s)" rows = cursor.excute(sql,('jason','123')) # 修改 sql = "update user set username='jasonDSB' where id=1" rows = cursor.excute(sql) """ 增和改单单执行excute并不会真正影响到数据,需要再执行conn.commit()才可以完成真正的增改 """ # 一次插入多行记录 res = cursor,excutemany(sql,[(),(),()]