python - 如何使用 PyQt 和 QtSql 登录数据库

标签 python pyqt4 qtsql

我有一个 PyQt4 应用程序,它提供注册和登录功能。注册效果很好,也就是说,凭据按预期存储在数据库中。问题在于登录,它接受任何凭据,包括数据库中不存在的凭据。下面是正在使用的代码。

self.database1 = QtSql.QSqlDatabase().addDatabase('QMYSQL')
self.database1.setHostName('localhost')
self.database1.setDatabaseName('database')
self.database1.setUserName('root')
self.database1.setPassword('')
if self.database1.open():
    print('Successful')
else:
    print(self.database1.lastError().text())

username = self.userName1.text()
password = self.passwordSlot.text()
query = QtSql.QSqlQuery(self.database1)
credentials = query.prepare("SELECT * FROM credentials WHERE username = ? and password = ?")
if credentials:
    query.addBindValue(username)
    query.addBindValue(password)
    query.exec_()
    self.database1.close()
    print('Successfully logged in')
else:
    print('Failed')

最佳答案

prepare() 返回一个 bool 值,指示语句是否正确,因此它不能指示凭据是否匹配,因为正确的语句将始终为 true,您应该知道什么如果数据库中的信息是订单至少返回一个元素,我们可以使用 first() 来做到这一点:

self.database1 = QtSql.QSqlDatabase().addDatabase('QMYSQL')
self.database1.setHostName('localhost')
self.database1.setDatabaseName('database')
self.database1.setUserName('root')
self.database1.setPassword('')
if self.database1.open():
    print('Successful')
else:
    print(self.database1.lastError().text())

username = self.userName1.text()
password = self.passwordSlot.text()
query = QtSql.QSqlQuery(self.database1)
is_valid_query = query.prepare("SELECT * FROM credentials WHERE username = ? and password = ?")
if is_valid_query:
    query.addBindValue(username)
    query.addBindValue(password)
    if query.exec_():
        if query.first():
            print('Successfully logged in')
        else:
            print('Failed')
    else:
        print(query.lastError().text())
self.database1.close()

关于python - 如何使用 PyQt 和 QtSql 登录数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49344925/

相关文章:

python - Django:将 views.py 分离到它自己的模块中是个好主意吗?

qt - PyQT(也是 C++ QT 绑定(bind))嵌入式 urxvt 终端失去焦点

qt - 获取光标下的所有小部件

sql - QtSql 无法执行查询

python - 使用 QSqlQuery 更新 sqlite3 数据库

database - qt中如何加载ODBC

python - 任何 dhcp python 库?

python - Django - 通过 URL 调度程序的 href 传递参数?

python - 如何使用 Python 在文件夹中搜索与正则表达式匹配的文件名?

python - 按钮的单按钮事件处理程序