python之pymysql

             pymysql              

一.python操作数据库

用到的库:pymysql 
安装 :
pip install pymysql
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()
python之SQL注入问题及解决
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()
pyysql增操作
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()
pymysql插入数据失败回滚
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()
lastrowid的使用(多表联系时)
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.光标操作

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()
光标操作

面试题

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)
去除多余嵌套的列表

 

 

 

 

posted on 2020-03-12 18:24  眨眼星舟_Eric  阅读(281)  评论(0编辑  收藏  举报

导航