# 1.pymysql连接mysql校验用户名和密码: import pymysql usn = input(\'请输入用户名:\') psd = input(\'请输入密码:\') # pymysql连接MySQL,得到一个连接 conn = pymysql.connect( host=\'localhost\', port=3306, #数字类型 user=\'root\', password=\'123\', database=\'db1\', charset=\'utf8\' #注意是utf8不是utf-8 ) cursor = conn.cursor() #光标对象 #不推荐此写法 # sql = "select * from userinfo where username=\'%s\'and password=\'%s\'"%(usn,psd) #sql语句 # ret = cursor.execute(sql) #光标执行sql语句,拿到行数 #推荐下面传参的写法 sql = "select * from userinfo where username=%s and password=%s" #sql语句 ret = cursor.execute(sql,[usn,psd]) #让pymysql帮忙拼接字符串,避免出错,使用列表和元祖都可以 print(ret) if ret: print(\'登录成功\') else: print(\'登录失败\') cursor.close() #关闭对象 conn.close() #关闭连接 # 2.增: 增删改都需要commit,查不需要。 import pymysql conn = pymysql.connect( host=\'localhost\', port=3306, user=\'root\', password=\'123\', database=\'db1\', charset=\'utf8\' ) cursor = conn.cursor() sql = \'insert into userinfo(username,password) values(%s,%s)\' cursor.execute(sql,[\'tommy\',\'777\']) conn.commit() #提交,注意这里是提交!!!!!! cursor.close() conn.close() #3.返回字典格式数据:将结果作为字典返回的光标 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) #4.失败回滚 #在执行增删改操作时,如果前面的操作不成功,可以使用 rollback() 回滚取消操作。 sql = \'insert into userinfo(username,password) values(%s,%s)\' try: # 尝试执行SQL语句 cursor.execute(sql, [usn,psd]) # 如果上面代码没问题,就提交事务 conn.commit() except Exception as e: #上面尝试执行的代码有问题,把结果作为e返回 print(\'有错误\',str(e)) # 接着回滚事务 conn.rollback() #5.获取刚插入数据的ID(连表操作时会用到) # 提交事务 conn.commit() # 提交事务之后,才可以获取刚插入的数据的ID last_id = cursor.lastrowid #6.批量执行 data = [("Alex", 18), ("Egon", 20), ("Yuan", 21)] cursor.executemany(sql, data) #7.删 sql = "DELETE FROM userinfo WHERE id=%s;" cursor.execute(sql, [4]) conn.commit() #8.改 sql = \'update userinfo set username=%s where id=%s\' cursor.execute(sql,[\'ttt\',1]) conn.commit() #9.获取数据: #9.1 获取单条数据,结果是字典,k是数据库的字段名,v是值 sql = \'select * from userinfo where id = %s\' cursor.execute(sql,[1]) ret = cursor.fetchone() print(ret) #{k1:v1,k2:v2} # 9.2 获取多条数据,结果是字典列表,一个字典就是一行数据。 sql = \'select * from userinfo\' cursor.execute(sql) ret = cursor.fetchall() print(ret) #[{k1:v1,k2:v2},{k1:v1,k2:v2}......] #10.进阶用法 # 可以获取指定数量的数据 cursor.fetchmany(3) # 光标按绝对位置移动1,也就是移动到第一行 cursor.scroll(1, mode="absolute") # 光标按照相对位置(当前位置)移动1,也就是移动到下一行 cursor.scroll(1, mode="relative")
#11.pycharm安装pymysql的方法
#12.pycharm连接mysql的方法,安装驱动,,URL后面添加?serverTimezone=GMT
#13.pycharm的database按钮
14.sql注入问题:通过传参解决:cursor.execute(sql,[usn,psd])