python之pymysql
pymysql
一.python操作数据库
用到的库:pymysql
安装 :
pip install pymysql
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import pymysql #连接数据库 username=input("请输入用户名:") pwd=input("请输入密码:") conn=pymysql.connect( host="localhost", port=3306, database="userinfo", user="root", password="12345678", charset="utf8"#注意无- ) cursor=conn.cursor() # 获取输入sql语句的光标对象 # sql注入问题 # sql="select * from info where username='%s' and password='%s';" # 注意上述sql语句中存在字符串拼接,可通过用户输入的数据进行数据拼接,使原始的语句的语法发生改变,从而得到非法的结果。 # eg:用户名:eric'--或者Alex' or 1=1 -- 密码:12432,同样可以登陆成功,这是由于用户名中的“,”与语句中的第一个","形成拼接,而通过"--"将后面的语句全部视为注释语句,导致出现sql注入问题。 # 解决方法:去掉’,通过执行函数中的参数进行列表传值。让pymysql帮我们拼接sql语句 sql = "select * from info where username=%s and password=%s;" ret=cursor.execute(sql,[username,pwd]) print(ret) # 关闭连接 cursor.close() conn.close()
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import pymysql # 连接数据库 usn=input("请输入用户名:") pwd=input("请输入密码:") conn=pymysql.connect( host="localhost", port=3306, database="userinfo", user="root", password="12345678", charset="utf8" # 注意无- ) cursor=conn.cursor() # 获取输入sql语句的光标对象 sql="insert into info (username,password)VALUES(%s,%s)" cursor.execute(sql, [usn,pwd]) # 对数据库进行写操作必须进行提交数据 conn.commit() # 关闭连接 cursor.close() conn.close()
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import pymysql # 连接数据库 usn=input("请输入用户名:") pwd=input("请输入密码:") conn=pymysql.connect( host="localhost", port=3306, database="userinfo", user="root", password="12345678", charset="utf8" # 注意无- ) cursor = conn.cursor() # 获取输入sql语句的光标对象 sql = "insert into info (username,password)VALUES(%s,%s)" try: cursor.execute(sql, [usn, pwd]) # 对数据库进行写操作必须进行提交数据 conn.commit() except Exception as e: # 失败执行 print("报错:",str(e)) conn.rollback() # 数据回滚 # 关闭连接 cursor.close() conn.close()
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import pymysql # 连接数据库 usn = input("请输入用户名:") pwd = input("请输入密码:") conn = pymysql.connect( host="localhost", port=3306, database="userinfo", user="root", password="12345678", charset="utf8" # 注意无- ) cursor=conn.cursor() # 获取输入sql语句的光标对象 # 创建班级的sql语句 sql1 = "insert into class (name)VALUES(%s)" # 创建学生的sql语句 sql2 = "insert into student (name,cid)VALUES(%s,%s)" cursor.execute(sql1, "全栈开发") # 获取刚插入数据的ID last_id=cursor.lastrowid cursor.execute(sql2,["小小子",last_id]) # 对数据库进行写操作必须进行提交数据 conn.commit() # 关闭连接 cursor.close() conn.close()
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import pymysql #连接数据库 conn=pymysql.connect( host="localhost", port=3306, database="userinfo", user="root", password="12345678", charset="utf8"#注意无- ) cursor=conn.cursor()#获取输入sql语句的光标对象 sql="insert into info (username,password)VALUES(%s,%s)" data=[("youyou","me"),("wui","shui"),("小一码","女神")] cursor.executemany(sql,data) #对数据库进行写操作必须进行提交数据 conn.commit() #关闭连接 cursor.close() conn.close()
1.增
1.1 多增
sql="insert into info (username,password)VALUES(%s,%s)" cursor.executemany(sql,[(),()])
1.2 单增
sql="insert into info (username,password)VALUES(%s,%s)" cursor.execute(sql,[])
2.删
sql="delete from info where id=%s;"
3.改
sql="update info set password=%s where username=%s"#重置密码
4.光标操作
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import pymysql #连接数据库 conn=pymysql.connect( host="localhost", port=3306, database="userinfo", user="root", password="12345678", charset="utf8" ) cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)#指定返回的数据格式为字典格式 cursor.scroll(1,mode="absolute")#光标按照绝对位置移动1,写多少,移到多少 # cursor.scroll(1,mode="relative")#光标按照相对位置移动1,以当前位置为始点,移动一位 sql="select * from info" cursor.execute(sql) ret=cursor.fetchall()#返回所有的数据 ret=cursor.fetchone()#返回第一条数据,当查不到时,返回none ret=cursor.fetchmany(3)#返回多条数据,括号中为具体的数据数量 print(ret) #对数据库进行写操作必须进行提交数据 conn.commit() #关闭连接 cursor.close() conn.close()
面试题
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
list1 = [11, [22, 3], [4, ], [55, 66], 8, [9, [7, [12, [34, [26]]]]]] # 去除多余嵌套的列表,得到[11,22,3,4,55,66,8] def func(x): ret = [] for b in x: if isinstance(b, list): for a in func(b): ret.append(a) else: ret.append(b) return ret ret = func(list1) print(ret)