1、pymysql模块:连接、执行mysqlmysql
安装模块:pip3 install pymysqlsql
# 语法: # pymysql操做数据库: 1. conn = pymysql.connect # 连接数据库 2. cursor = con.cursor() 3. cursor.execute(sql语句) # 查询 4. cursor.fetchone() # 取一行数据 5. cursor.fetchmany(5) # 取指定几行数据 6. cursor.fetchall() # 取到全部的结果集 # 增长 # 增长一条数据: cursor.execute(insert 语句, 传入的参数) # 增长多条数据: cursor.executemany(insert 语句, 传入的多个参数) conn.commit() # 删除 # 删除一条数据: cursor.execute(delete语句, 传入的参数) # 删除多条数据: cursor.executemany(delete语句, 传入的多个参数) conn.commit() # 修改 # 修改一条数据: cursor.execute(update语句, 传入的参数) #修改多条数据: cursor.executemany(update语句,传入的多个参数) conn.commit()
# 查询 import pymysql user=input('用户名: ').strip() password=input('密码: ').strip() #连接 conn=pymysql.connect(host='localhost',user='root',password='root',database='user',charset='utf8') #游标 cursor=conn.cursor() #执行完毕返回的结果集默认以元组显示 #cursor=conn.cursor(cursor=pymysql.cursors.DictCursor) #执行sql语句 sql='select * from user where username="%s" and pwd="%s"' %(user,password) #注意%s须要加引号,可是像这样写会致使sql注入的状况 print(sql) res=cursor.execute(sql) #执行sql语句,返回sql查询成功的记录数目 print(res) # 1 cursor.close() conn.close() if res: print('登陆成功') else: print('登陆失败')
execute()之sql注入数据库
# sql注入 sql = "select * from user where username = '%s' and pwd = '%s'" % (username, pwd) res = cursor.execute(sql)
# 采用上面这种方式,很容易被进行sql注入,影响数据安全 #一、sql注入之:用户存在,绕过密码 simon' -- 任意字符 #二、sql注入之:用户不存在,绕过用户与密码 xxx' or 1=1 -- 任意字符 # 解决方法 # 原来是咱们对sql进行字符串拼接 # sql="select * from user where username='%s' and pwd='%s'" %(user,password) # print(sql) # res=cursor.execute(sql) #改写为(execute帮咱们作字符串拼接,咱们无需且必定不能再为%s加引号了) sql="select * from user where username=%s and pwd=%s" #!!!注意%s须要去掉引号,由于pymysql会自动为咱们加上 res=cursor.execute(sql,(user,password)) #pymysql模块自动帮咱们解决sql注入的问题,只要咱们按照pymysql的规矩来。
数据表增长一条或多条数据:安全
import pymysql ### 连接mysql数据库 conn = pymysql.connect(host='localhost', user='root', password='root', database='user') cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) sql = "insert into userinfo (name, email) values (%s, %s)" ### 增长一条数据 # cursor.execute(sql, ('zekai6', 'yui')) # 执行sql语句,返回sql影响成功的行数 ### 增长多条数据 data = [] for i in range(3000000): data.append(('root'+str(i), 'root'+str(i)+'@qq.com')) cursor.executemany(sql, data) ### 提交后才发现表中插入记录成功 conn.commit() cursor.close() conn.close()
删除数据:app
import pymysql ### 连接mysql数据库 conn = pymysql.connect(host='localhost', user='root', password='root', database='user') cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) sql = "delete from user where id=%s" ### 删除一条数据 # cursor.execute(sql, (11)) try: cursor.executemany(sql, (12,13,14)) ### 提交 conn.commit() except Exception as e: conn.rollback() # print(cursor.lastrowid) cursor.close() conn.close()
获取插入的最后一条数据的自增IDfetch
import pymysql conn=pymysql.connect(host='localhost',user='root',password='root',database='user') cursor=conn.cursor() sql='insert into userinfo(username,pwd) values("xxx","123");' rows=cursor.execute(sql) print(cursor.lastrowid) #在插入语句后查看 conn.commit() cursor.close() conn.close()