参考:http://www.cnblogs.com/liwenzhou/p/8032238.html
使用pycharm操作数据库。
填写要连接的数据库。
建表。
上传填写完的数据库。
PyMysql操作数据库。
import pymysql # 拿到用户输入的用户名密码 # 去数据库里面判断用户名和密码是否正确 # 1. 连接数据库 conn = pymysql.connect( host="localhost", port=3306, # 端口号是数字类型 database="userinfo", # 写自己本地的数据库名字 user="root", password="1**3*8", charset="utf8" # 千万记得没有- ) cursor = conn.cursor() # 获取输入SQL语句的 光标 对象 sql = "select * from info;" ret = cursor.execute(sql) print(ret) # 关闭连接 cursor.close() conn.close()
结果:
3
Process finished with exit code 0
SQL防注入
import pymysql # 获取用户输入 username = input("输入用户名:") pwd = input("请输入密码:") # 连接数据库检索有没有该用户 conn = pymysql.connect( host="localhost", port=3306, database="userinfo", user="root", password="123456", charset="utf8" ) cursor = conn.cursor() # 获取光标 # 拼接要执行的SQL语句 sql = 'select * from info where username=%s and password=%s' # %s 不再需要引号 print(sql) print("=" * 120) # 执行SQL语句 ret = cursor.execute(sql, [username, pwd]) # 让pymysql帮我们拼接SQL语句 if ret: print("登录成功") else: print("登录失败!") # 关闭光标对像 cursor.close() # 关闭连接 conn.close()
数据出错回滚操作:
1 """ 2 pymysql增操作 3 """ 4 5 import pymysql 6 7 conn = pymysql.connect( 8 host="localhost", 9 port=3306, 10 database="userinfo", 11 user="root", 12 password="1×××××", 13 charset="utf8" 14 ) 15 16 cursor = conn.cursor()#获取要执行的光标 17 18 # 拼接语句 19 sql = "insert into info (username, password)VALUES (%s, %s)" 20 # 执行 21 try: 22 cursor.execute(sql, ["大旭",]) 23 # 自己写个for循环 (今天作业自己试下) 24 conn.commit() #确认 25 except Exception as e: 26 print("报错啦:", str(e)) 27 conn.rollback() # 错误回滚 28 # 对数据库做写操作一定要记得提交assword 29 30 cursor.close() 31 conn.close()
lastrowid(cid是获取的另一张表的id,使两个id对应)
import pymysql conn = pymysql.connect( host="localhost", port=3306, database="userinfo", user="root", password="112358", charset="utf8" ) cursor = conn.cursor() # 创建班级的sql语句 sql1 = "insert into class (name) VALUES (%s)" # 创建学生的sql语句 sql2 = "insert into student (name, cid) VALUES (%s, %s)" cursor.execute(sql1, "全栈9期") new_id = cursor.lastrowid # 获取刚插入数据的ID值 cursor.execute(sql2, ["小东北", new_id]) conn.commit() cursor.close() conn.close()
1 import pymysql 2 3 conn = pymysql.connect( 4 host="localhost", 5 port=3306, 6 database="userinfo", 7 user="root", 8 password="1*****", 9 charset="utf8" 10 ) 11 12 cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 指定返回的数据格式为字典格式 13 14 sql = "select * from info" 15 16 cursor.execute(sql) # 返回的不是具体的数据而是受影响的行数 17 # ret = cursor.fetchall() # 返回所有的数据 18 # ret = cursor.fetchone() # 返回第一条的数据 19 # print(ret) 20 # ret = cursor.fetchone() # 返回一条的数据 21 # print(ret) 22 # ret = cursor.fetchone() # 返回一条的数据 23 # print(ret) 24 # ret = cursor.fetchone() # 返回一条的数据 25 # print(ret) 26 # ret = cursor.fetchone() # 返回一条的数据 27 # print(ret) 28 # ret = cursor.fetchone() # 返回一条的数据 29 # print(ret) 30 # ret = cursor.fetchone() # 返回一条的数据 31 # print(ret) 32 33 ret = cursor.fetchmany(3) # 查询具体多少条数据 34 print(ret) 35 # cursor.scroll(0, mode="absolute") # 绝对移动,写多少就是移到多少 36 37 cursor.scroll(-1, mode="relative") # 光标往前移一格 38 ret = cursor.fetchall() #( -1 )这里的光标是从第3条后开始的 39 print(ret) 40 cursor.close() 41 conn.close()
结果:
[{'username': '田径', 'password': 'abcde', 'id': 1}, {'username': '调高', 'password': 'cscsj', 'id': 2}, {'username': '篮球', 'password': 'haha', 'id': 3}] [{'username': '篮球', 'password': 'haha', 'id': 3}] Process finished with exit code 0