参考:http://www.cnblogs.com/liwenzhou/p/8032238.html
使用pycharm操作数据库。
填一个数据库名,User:填root
填写要连接的数据库。
建表。
上传填写完的数据库。
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="",
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()
数据出错回滚操作:
"""
pymysql增操作
""" import pymysql conn = pymysql.connect(
host="localhost",
port=3306,
database="userinfo",
user="root",
password="1×××××",
charset="utf8"
) cursor = conn.cursor()#获取要执行的光标 # 拼接语句
sql = "insert into info (username, password)VALUES (%s, %s)"
# 执行
try:
cursor.execute(sql, ["大旭",])
# 自己写个for循环 (今天作业自己试下)
conn.commit() #确认
except Exception as e:
print("报错啦:", str(e))
conn.rollback() # 错误回滚
# 对数据库做写操作一定要记得提交assword cursor.close()
conn.close()
lastrowid(cid是获取的另一张表的id,使两个id对应)
import pymysql conn = pymysql.connect(
host="localhost",
port=3306,
database="userinfo",
user="root",
password="",
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()
import pymysql conn = pymysql.connect(
host="localhost",
port=3306,
database="userinfo",
user="root",
password="1*****",
charset="utf8"
) cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 指定返回的数据格式为字典格式 sql = "select * from info" cursor.execute(sql) # 返回的不是具体的数据而是受影响的行数
# ret = cursor.fetchall() # 返回所有的数据
# ret = cursor.fetchone() # 返回第一条的数据
# print(ret)
# ret = cursor.fetchone() # 返回一条的数据
# print(ret)
# ret = cursor.fetchone() # 返回一条的数据
# print(ret)
# ret = cursor.fetchone() # 返回一条的数据
# print(ret)
# ret = cursor.fetchone() # 返回一条的数据
# print(ret)
# ret = cursor.fetchone() # 返回一条的数据
# print(ret)
# ret = cursor.fetchone() # 返回一条的数据
# print(ret) ret = cursor.fetchmany(3) # 查询具体多少条数据
print(ret)
# cursor.scroll(0, mode="absolute") # 绝对移动,写多少就是移到多少 cursor.scroll(-1, mode="relative") # 光标往前移一格
ret = cursor.fetchall() #( -1 )这里的光标是从第3条后开始的
print(ret)
cursor.close()
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