- 第一步连接MySQL数据库,并且安装pymysql,可能出现的问题: >> python如何连接MySql数据库 <<
# 文件名称:01-连接数据库.PY
# 开发工具:PyCharm
import pymysql
# 打开数据库连接
db1 = pymysql.connect(host='localhost', user='root', password='MYSQL1', database='JSSF')
# 通过cursor()方法获取操作游标
cursor = db1.cursor()
# 使用execute()方法执行sql语句
test = cursor.execute("select version()") # 显示当前版本号
print(test)
# 使用fetchone()获取一条数据
data = cursor.fetchone()
print("当前数据库的版本号:",data) # 当前数据库的版本号: ('5.7.17-log',)
db1.close()
- 创建表操作
插入数据操作
# 文件名称:02-创建表.PY
# 开发工具:PyCharm
import pymysql
'''在数据库中,创建table表
1、连接数据库
2、删除该表,如果该表存在
3、新建表
'''
# 创建数据库连接
db1 = pymysql.connect(host='localhost',user='root',password='MYSQL1',database='jssf')
cursor = db1.cursor()
# cursor.execute('drop table if EXISTS employee')
# 如果不存在执行以下sql语句
sql = """
create table employee(
first_name char(20) not null,
last_name char(20),
age int,
sex char(1),
income FLOAT
)
"""
# 执行sql语句
# cursor.execute(sql)
add = "insert into employee(first_name, last_name, age, sex, income) values('张','小三','20','m',8200)"
try:
# 执行语句
cursor.execute(add)
# 提交事务,不提交事务会回滚
db1.commit()
print("添加成功")
except:
# 事务回滚
db1.rollback()
print("添加失败")
- 查询语句
# 文件名称:03-数据库查询操作.PY
# 开发工具:PyCharm
import pymysql
db = pymysql.connect(host='localhost', user='root', password='MYSQL1', database='jssf')
cursor = db.cursor()
# 查询语句
sql ="select * from employee"
try:
cursor.execute(sql)
# 获取所有查询结果的列表
results = cursor.fetchall()
for i in results:
fname = i[0]
lname = i[1]
age = i[2]
sex = i[3]
income = i[4]
print("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % (fname, lname, age, sex, income))
except:
print("error")
sql2 = "select * from employee where income >= %d" % 3000
try:
cursor.execute(sql2)
# 获取所有查询结果的列表
results = cursor.fetchall()
for i in results:
fname = i[0]
lname = i[1]
age = i[2]
sex = i[3]
income = i[4]
print("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % (fname, lname, age, sex, income))
except:
print("error")
- 更新语句
# 文件名称:04-修改操作.PY
# 开发工具:PyCharm
import pymysql
db = pymysql.connect(host='localhost', user='root', password='MYSQL1', database='jssf')
cursor = db.cursor()
sql = "update employee set age = age + 1 where sex = '%c'" % ('m')
try:
cursor.execute(sql)
db.commit()
print("修改成功")
except:
db.rollback()
print("修改失败")
db.close()
登录注册案例—Tkiner+数据库操作
- 建表插入初始数据
# 文件名称:login_table.PY
# 开发工具:PyCharm
import pymysql
# 创建数据库连接
db1 = pymysql.connect(host='localhost',user='root',password='MYSQL1',database='jssf')
cursor = db1.cursor()
# cursor.execute('drop table if EXISTS employee')
# 如果不存在执行以下sql语句
sql = """
create table user(
id int PRIMARY KEY AUTO_INCREMENT,
name char(20) not null,
password char(10) NOT NULL
)
"""
# 执行sql语句
# cursor.execute(sql)
add = "insert into user(name, password) values('小护', '120021')"
try:
# 执行语句
cursor.execute(add)
# 提交事务,不提交事务会回滚
db1.commit()
print("添加成功")
except:
# 事务回滚
db1.rollback()
print("添加失败")
- 登录界面
# 登录界面案例
import tkinter as tk
from tkinter import messagebox
from Day10 import register
import pymysql
class Login(tk.Frame):
def __init__(self):
global root
root = tk.Tk()
# 设置窗口大小
root.geometry("300x200")
# 设置窗体的大小固定不可被修改,1为可以,0为不可以
# 第一个参数宽度是否可以被修改,第二个参数高度是否可以被修改
root.resizable(0, 0)
super().__init__()
# 用户名输入框
self.username = tk.StringVar()
self.password = tk.StringVar()
self.pack()
# 布局的方法
self.main_login()
# 显示
root.mainloop()
# 主体布局的方法
def main_login(self):
global root
'''place是设置位置'''
user_title_lable = tk.Label(root, text="登录窗口", font=('宋体', 13)).place(x=120, y=10)
username_lable = tk.Label(root, text="用户名:", font=('宋体', 13)).place(x=20, y=50)
'''textvariable是指这个控件的值绑定的变量'''
username = tk.Entry(root, width=16, textvariable=self.username).place(x=90, y=50)
password_lable = tk.Label(root, text="密码:", font=('宋体', 13)).place(x=20, y=90)
password = tk.Entry(root, show="*", width=16, textvariable=self.password).place(x=90, y=90)
'''command是点击按钮触发后的函数'''
login_lable = tk.Button(root, text="登录", command=self.check_login, font=('宋体', 13)).place(x=80, y=130)
cancel_table = tk.Button(root, text="注册", command=self.to_register, font=('宋体', 13)).place(x=160, y=130)
# 验证函数
def check_login(self):
# 监控输入框
print("user", self.username.get())
print("password", self.password.get())
# 判断字典中对应的value和输入的密码是否一致
if self.query() == True:
messagebox.showinfo("通知", "登陆成功!")
else:
messagebox.showinfo("通知", "用户名或密码错误!")
# 数据库查询
def query(self):
db = pymysql.connect(host='localhost', user='root', password='MYSQL1', database='jssf')
cursor = db.cursor()
sql = "select * from user where name='%s' and password='%s'" % (self.username.get(), self.password.get())
try:
cursor.execute(sql)
# 获取所有查询结果的列表
results = cursor.fetchall()
for i in results:
username = i[1]
pwd = i[2]
print("username = %s,pwd = %s" % (username, pwd))
print("找到了")
return True
except:
print("error")
return False
db.close()
# 跳转到注册页面
def to_register(self):
root.destroy()
register.Regist()
if __name__ == '__main__':
Login()
- 注册界面
# 文件名称:register.PY
# 开发工具:PyCharm
import tkinter as tk
from tkinter import messagebox
import pymysql
from Day10 import login
class Regist(tk.Frame):
def __init__(self):
global root
root = tk.Tk()
# 设置窗口大小
root.geometry("300x200")
# 设置窗体的大小固定不可被修改,1为可以,0为不可以
# 第一个参数宽度是否可以被修改,第二个参数高度是否可以被修改
root.resizable(0, 0)
super().__init__()
# 用户名输入框
self.username = tk.StringVar()
self.password = tk.StringVar()
self.pwd = tk.StringVar()
self.pack()
# 布局的方法
self.main_login()
# 显示
root.mainloop()
# 主体布局的方法
def main_login(self):
global root
'''place是设置位置'''
user_title_lable = tk.Label(root, text="注册窗口", font=('宋体', 13)).place(x=120, y=10)
username_lable = tk.Label(root, text="用户名:", font=('宋体', 13)).place(x=20, y=45)
'''textvariable是指这个控件的值绑定的变量'''
username = tk.Entry(root, width=16, textvariable=self.username).place(x=110, y=45)
password_lable = tk.Label(root, text="密码:", font=('宋体', 13)).place(x=20, y=85)
password = tk.Entry(root, show="*", width=16, textvariable=self.password).place(x=110, y=85)
pwd_lable = tk.Label(root, text="再次输入:", font=('宋体', 13)).place(x=20, y=125)
pwd = tk.Entry(root, show="*", width=16, textvariable=self.pwd).place(x=110, y=125)
'''command是点击按钮触发后的函数'''
login_lable = tk.Button(root, text="注册", command=self.check, font=('宋体', 13)).place(x=80, y=160)
cancel_table = tk.Button(root, text="登录", command=self.to_login, font=('宋体', 13)).place(x=160, y=160)
# 验证函数
def check(self):
# 检查密码是否一致
if self.password.get() != self.pwd.get():
messagebox.showinfo("通知", "两次输入密码不一致")
# 检查用户名是否被注册
elif self.query() == False:
messagebox.showinfo("通知", "用户名已经被注册")
else:
messagebox.showinfo("通知", "注册成功")
# 全部检查完后可以添加用户
self.add()
# 查询数据库验证用户是否存在
def query(self):
db = pymysql.connect(host='localhost', user='root', password='MYSQL1', database='jssf')
cursor = db.cursor()
sql = "select * from user where user.name='%s'" % (self.username.get())
print(sql)
try:
cursor.execute(sql)
# 获取所有查询结果的单个元组
result = cursor.fetchone()
print(result)
if result:
print("该用户名已经被注册")
return False
else:
print("可以注册")
return True
except:
print("error")
# 注册插入函数
def add(self):
db = pymysql.connect(host='localhost', user='root', password='MYSQL1', database='jssf')
cursor = db.cursor()
sql = "insert into user(name, password) values ('%s', '%s')" % (self.username.get(), self.password.get())
print(sql)
try:
cursor.execute(sql)
db.commit()
print("注册成功")
except:
db.rollback()
print("修改失败")
db.close()
# 去登录
def to_login(self):
root.destroy()
login.Login()