一、测试连接数据库
1. 安装MySQL的包
pip install pymysql -i https://pypi.doubanio.com/simple #加入豆瓣源
或者
2. 连接数据库
2.1 创建DatabaseOperations.py,实现数据库连接和关闭的功能
import pymysql
"""
配置端口、用户名、主机、密码
"""
def get_conn(): # 实现数据库连接的功能
try:
conn = pymysql.connect(host='localhost',#主机
user='root',#用户'NoneType' object has no attribute 'cursor'
port=3306,#端口
password='xxx',#密码
charset='utf8',#编码
database='hsp_db02'#数据库名称,实际是表的名称
)
# 必须先和数据库建立一个传输数据的连接通道,也就是Connection实例,需要用到pymysql下的connect()方法
print('数据库连接成功')
return conn # 返回初始化好的Connection实例
except pymysql.connect.Error:
print('数据库连接错误')
def close_conn(conn,cursor): # conn:连接实例 cursor:游标
try:
if cursor:
cursor.close()
if conn:
conn.close()
except Exception as s:
print(s)
finally:
try:
cursor.close()
except:
pass
try:
conn.close()
except:
pass
2.2 测试一下上述代码是否成功,在databaseTest.py中测试
参考链接
import DatabaseOperations as dbopt
#数据库操作流程
#1、获取连接
conn = dbopt.get_conn()
#2、获取cursor游标
cur = conn.cursor()
#3、sql语句
sql = 'insert into goods(id, goods_name,price) values(100, "华为手机", 2000)'#这里的类别是表,leibie_name是列名
#4、执行语句
cur.execute(sql)
#5、insert,update,delete必须提交显示
conn.commit()
#6、关闭资源
dbopt.close_conn(conn,cur)
使用NAVICAT连接数据库查找有无将上述代码中INSERT插入的数据写入数据库中
二、将Qt Designer中设计的.ui文件通过PyCharm显示
1. 将.ui转换为.py文件
pyuic5 -o log_in.py login.ui
2. 在PyCharm中运行显示界面
main.py
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow
import log_in # log_in.py导入
if __name__ == '__main__':
app = QApplication(sys.argv) # 创建QApplication对象,该语句必须要有,否则界面闪现
windowLogin = QMainWindow()
uiLogin = log_in.Ui_login_MainWindow()
uiLogin.setupUi(windowLogin)
windowLogin.show()
sys.exit(app.exec_()) # 启动应用程序的事件循环
注意问题
- Pycharm运行程序后,Qt Designer 插入的背景图片无法显示在界面
因为在Qt Designer添加背景图片时,添加的那个qrc文件(我这是picture.qrc文件),没有在pycharm中没有转换成代码。在pycharm将qrc转换成py文件格式,需要添加一个外部工具,那个程序应该叫pyrcc5.exe,具体点开链接查看如何创建.qrc文件
然后我们在Pycharm中打开picture.qrc文件,右击选择pyrcc这个External Tools,然后就会生成对应的picture_rc.py文件。
最后在log_in.py中就能运行import picture_rc
三、点击登录按钮实现连接数据库
- 对登录界面的“登录”按钮添加槽/函数
'''绑定登录按钮到处理函数'''
uiLogin.login_pushButton.clicked.connect(pushButtonLogin_click)
注意上面的程序需要写在sys.exit(app.exec_())之前。
2. 实现pushButtonLogin_click()函数
def pushButtonLogin_click():
# 数据库操作流程
# 1、获取数据库连接
db = dbopt.get_conn()
# 判断用户名密码
username = uiLogin.user_name_lineEdit.text() # 获取输入的用户名文本
password = uiLogin.pwd_lineEdit.text() # 获取输入的密码文本
'''如果数据库有该用户,则跳转到下一个菜单界面,并关闭登录界面'''
if len(username) and len(password) and has_user(username, password, db):
print("审核成功")
# windowApp.show()
windowLogin.close() # 关闭该登录界面
else: # 使用 PyQt 中的 QMessageBox 类创建一个警告对话框,并在用户输入的用户名或密码错误时显示该对话框
QMessageBox.warning(windowLogin,
"警告",
"用户名或密码错误!",
QMessageBox.Yes)
以上代码未写“跳转下一个菜单界面”的功能,暂时使用print(“审核成功”)代替。
3. 实现has_user()函数
def has_user(Account, Passwd, connection):
# 使用哈希函数对密码进行处理,增加安全性
# hashed_passwd = hashlib.sha256(Passwd.encode()).hexdigest()
# 使用参数化查询构建 SQL 语句
sql = "SELECT * FROM user WHERE account = %s AND passwd = %s"
# 尝试执行查询
try:
with connection.cursor() as cursor: # 创建游标
cursor.execute(sql, (Account, Passwd))
print(sql)
print((Account, Passwd))
result = cursor.fetchone()
# 如果结果不为None,表示找到匹配的用户
return result is not None
# 关闭数据库资源
dbopt.close_conn(db, cursor)
except Exception as e:
print(f"Error during database query: {e}")
return False
四、数据库中添加用户名和密码
- 使用NAVICAT连接MySQL
- 创建数据库hsp_db02并创建表user
- 在表中插入用户名和密码