# 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])