一,python连接数据库基本语法:
#在pyhon程序中连接数据库执行sql语句 -->pymysql模块 #连接数据库,得到一个链接 import pymysql conn = pymysql.connect( host = 'localhost', port = 3306, user = 'root', password = '123', database = 'db', charset = 'utf8' #不带- ) #获取光标对象 cursor = conn.cursor() #得到光标语句 sql = "select * from userinfo where username='%s' and password='%s';" % (user,pwd); #使用光标对象执行sql语句 ret = cursor.execute(sql) #得到结果 print(ret) #返回受影响行数 #关闭光标 cursor.close() #关闭连接 conn.close()
二,SQL注入相关
Q1.什么是sql注入?
用户输入的内容有恶意的sql语句,后端拿到用户输入的内容不做检测直接做字符串拼接,得到一个和预期不一起的语句
Q2.如何解决sql注入?
对用户输入的内容做检测
pymysql内置了这种检测,我们只需要让pymysql帮我们拼接mysql语句
例:cursor.execute(sql,[name,pwd]) :让pymysql模块帮我们拼接sql语句,执行sql语句
三,SQL的增删改操作
# mysql增 cursor = conn.cursor() sql = "insert into userinfo(username, password) values (%s,%s);" ret = cursor.execute(sql,['Eva','456']) conn.commit() # 针对连接提交书务,涉及操作数据库的,一定要提交 cursor.close() conn.close() # mysql删 cursor = conn.cursor() sql = "delete from userinfo where username=%s;" ret = cursor.execute(sql,['alex']) conn.commit() # 针对连接提交书务,涉及操作数据库的,一定要提交 cursor.close() conn.close() # mysql改 cursor = conn.cursor() sql = "update userinfo set password=%s where username=%s;" ret = cursor.execute(sql,['999','boss_jin']) conn.commit() # 针对连接提交书务,涉及操作数据库的,一定要提交 cursor.close() conn.close()
四,SQL的查操作
# 1.返回的数据类型 # 1.默认返回的都是用元组表示的 # 2.返回字典类型的数据 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 2.常用方法 # 1.fetchone # 查询单条,多次执行现象类似生成器 # 2.fetchall # 查询全部 #进阶方法:fetmany(3) #查询指定数量的数据 # 3.回滚操作 conn.roll() #例1:返回元组 cursor = conn.cursor() sql = "select * from userinfo" cursor.execute(sql) ret = cursor.fetchall() print(ret) cursor.close() conn.close() #例2:返回字典 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) sql = "select * from userinfo" cursor.execute(sql) ret = cursor.fetchall() print(ret) cursor.close() conn.close() #例3:回滚操作 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) sql = "insert into userinfo (username, password) values (%s,%s)" try: cursor.execute(sql,['alex','alexsb']) cursor.lastrowid() # 获取插入值的id conn.commit() except Exception as e: conn.rollback() #若操作数据库过程中发生错误,则回滚操作 cursor.close() conn.close()
五,进阶用法
# 光标按绝对位置移动1 cursor.scroll(1, mode="absolute") # 光标按照相对位置(当前位置)移动1 cursor.scroll(1, mode="relative")