- 连接数据库
- 查:
- con = pymysql.connect(host="localhost",user="root",password="",database="xxx")
# 返回一个值,但执行语句还需要一个光标,就跟程序和线程差不多一个关系
- cursor = con.cursor() # 这就是光标
- sql="select * from userinfo where user='%s' % (user)"
cursor.execute(sql) # 让光标帮你执行sql语句
- 但是最好不要自己拼接,否则用户可能会自己输入特殊语句
比如:在user处输入 xxx or 1=1 -- , 就变成select * from userinfo where user =xx ' or 1 == 1 -- 这样加入注释后面的所有判断语句都会被注释掉导致判断为True(SQL注入)
- 所以应该 sql="select * from userinfo where user=%s"
cursor.excute(sql,user)
# excute会自己帮我们拼接,后面的参数还支持列表和字典
- ret=cursor.fetchone() # 执行的结果是一个返回值用 fetcht 取出,fetchtone只取一个,但是多次执行同一个语句将取出第1、2、3条,事实证明,取的时候是有指针在移动的,所以我们也可以修改指针的位置
- cursor.scroll(1,mode='relative') # 相对当前位置移动
cursor.scroll(2,mode='absolute') # 相对绝对位置移动
- fetchmany(4) # 一次性取多条
- fetchall() # 全部取出,一般要么取一条,要么全部取出,如果取多条可以在命令中用limit来限制
- 取出时如果不看原表,就不知道每个数据对应的是什么,所以可以使用命令来把显示的数据用字典来表示
cursor=con.cursor(cursor=pymysql.cursors.DictCursor)
- 增删改:
- 增删改时,应该在cursor.execute(sql)后加一个
con.commit() # 数据提交,否则原表就不会改变
- 如果想同时添加多个时可以
cursor.executemany(sql,[(),(),()]) # 该语句也有一个返回值,表示受影响的行数,如果增加(修改)了第一行,那么受影响的行数就是1,同理删和改一样
- cursor.lastrowid() # 可以得到新增数据的自增ID,如果插入多条那就是最后一个的自增ID
- 关闭数据库
- con.close()
cursor.close() # 两个都要关闭
posted @
2020-03-12 22:47
otome
阅读(
203)
评论()
编辑
收藏
举报