import pymysql user= input('用户名:>>').strip() pwd= input('密码:>>').strip() #先连接,拿到游标 conn=pymysql.connect(host='localhost',user='root',password='123456', database='day47',charset='utf8') cursor=conn.cursor() #拿到游标,即mysql > #执行sql sql='select * from user where user="%s" and password="%s";'%(user,pwd) print(sql) #注意%s须要加双引号 rows = cursor.execute(sql) #拿到受影响的行数 cursor.close() conn.close() if rows: print('登陆成功') else: print('登陆失败')
一、防注入mysql
如上咱们采用字符串拼接的形式生成sql语句。可是当存在 -- 时有可能对后面的语句造成干扰。sql
当面临这种状况时,用execute作字符串拼接ide
import pymysql user="egon1" pwd= 123 #先连接,拿到游标 conn=pymysql.connect(host='localhost',user='root',password='1234',
database='ls',charset='utf8') cursor=conn.cursor() #拿到游标,即mysql > sql="select * from std where name=%s and password=%s;" row_count=cursor.execute(sql,[user,pwd]) print(row_count) conn.commit() cursor.close() conn.close() ..............其中()【】均可以使用
当我查找数据时,会返回不少内容,咱们须要经过fetchone,fetchmany,fetchall来得到消息fetch
import pymysql user="egon16" pwd= 123 #先连接,拿到游标 conn=pymysql.connect(host='localhost',user='root',password='1234', database='ls',charset='utf8') cursor=conn.cursor() sql='select * from stu;' rows = cursor.execute(sql)
默认是元组类型, ((1, 'ssss', 123), (2, 'xixi', 123), (3, 'aaa', 456), (4, 'ttt', 147), (5, 'xix;i', 123), (6, 'aa;a', 456), (7, 't;tt', 147), (8, 'xigx;i', 123), (9, 'aa;a', 456), (10, 't;tgt', 147), (11, '的', 123)) 若是想得到字典类型 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) 结果: [{'password': 123, 'id': 1, 'name': 'ssss'}, {'password': 123, 'id': 2, 'name': 'xixi'}, {'password': 456, 'id': 3, 'name': 'aaa'}, {'password': 147, 'id': 4, 'name': 'ttt'}, {'password': 123, 'id': 5, 'name': 'xix;i'}, {'password': 456, 'id': 6, 'name': 'aa;a'}, {'password': 147, 'id': 7, 'name': 't;tt'}, {'password': 123, 'id': 8, 'name': 'xigx;i'}, {'password': 456, 'id': 9, 'name': 'aa;a'}, {'password': 147, 'id': 10, 'name': 't;tgt'}, {'password': 123, 'id': 11, 'name': '的'}]
#查单条fetchone # res1=cursor.fetchone() # res2=cursor.fetchone() # res3=cursor.fetchone() # print(res1) # print(res2) # print(res3) # print(res3[0]) #查多条fetchmany # print(cursor.fetchmany(3)) # print(cursor.fetchone()) #查全部fetchall # print(cursor.fetchall()) # print(cursor.fetchone()) #-------光标的移动-------- #1.绝对路径:从文件的开头位置算起 # print(cursor.fetchall()) # cursor.scroll(1,mode='absolute') # print(cursor.fetchone()) # cursor.scroll(3,mode='absolute') # print(cursor.fetchone()) #2.相对路径: print(cursor.fetchone()) print(cursor.fetchone()) cursor.scroll(2,mode='relative') #相对于上面的两条向后移两条 print(cursor.fetchone()) print('%s row in set (0.00 sec)' %rows) cursor.close() conn.close()
------查看表中最后一行的iD import pymysql conn=pymysql.connect(host='localhost',user='root',password='123456', database='day47',charset='utf8') cursor=conn.cursor() sql='insert into user1(user,password) values(%s,%s);' rows=cursor.execute(sql,('alex','123')) # rows=cursor.executemany(sql,[('yuanhao','123'),('laowu','123'),('kgf','12323')]) conn.commit() print(cursor.lastrowid) #查看表中最后一行的iD cursor.close() conn.close()
import pymysql # 建立链接 conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',passwd='1234',db='ls',charset='utf8') # 建立游标 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # cursor = conn.cursor() # 无参数存储过程 cursor.callproc('p2') # 等价于cursor.execute("call p2()") # 获取执行完存储的参数,参数@开头 cursor.callproc('p1',args=(1,22,)) cursor.execute("select @p1,@_p1_1,") # {u'@_p1_1': 22, u'@p1': 1, } # 执行SQL,并返回收影响行数 effect_row = cursor.execute("select * from stu") res1 = cursor.fetchall() print(res1) # 提交,否则没法保存新建或者修改的数据 conn.commit() # 关闭游标 cursor.close() # 关闭链接 conn.close()
使用with简化链接过程spa
import pymysql import contextlib # 定义上下文管理器,链接后自动关闭链接 @contextlib.contextmanager def mysql(host='127.0.0.1',port=3306,user='root',passwd='1234',db='ls',charset='utf8'): conn = pymysql.connect(host=host,port=port,user=user,passwd=passwd,db=db,charset=charset) cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) try: yield cursor finally: conn.commit() cursor.close() conn.close() # 执行sql with mysql() as cursor: print(cursor) row_count = cursor.execute("select * from stu") row_1 = cursor.fetchone() print(row_count,row_1)
import pymysql conn = pymysql.connect(host = 'localhost',user = 'root',password='123456',database = 'lianxi',charset = 'utf8') cursor = conn.cursor(pymysql.cursors.DictCursor) #以字典的形式输出 # rows = cursor.callproc('p1') #1.调用存储过程的方法 ,没参数时 # rows = cursor.callproc('p2',args=(3,7)) #有参数时 rows = cursor.callproc('p3', args=(3,7,123)) #@_p3_0=3,@_p3_1=7 ,@_p3_2=123 #有参数时 conn.commit() #执行 print(cursor.fetchall()) cursor.execute('select @_p3_0,@_p3_1,@_p3_2') print(cursor.fetchall()) cursor.close() conn.close()