对pyqt5和SQL Server数据库进行连接

问题遇到的现象和发生背景

在进行pyqt5和SQL Server进行连接时,输入参考网上的相关代码后,但无法进行连接

问题相关代码,请勿粘贴截图

#导入QtSql模块
from PyQt5.QtSql import QSqlDatabase, QSqlQuery
#创建数据库连接并打开(未指定数据库名,创建默认连接)
db = QSqlDatabase.addDatabase("QODBC")
db.setDatabaseName("Driver={Sql Server};Server=LAPTOP-GKV1SQBI;Database=WDDB;Uid=sa;Pwd=123456")
db.open()
ok = db.open()
print(ok)
"测试是否成功,记得关闭连接"
if ok:
db.close()
print("Database closed")

运行结果及报错内容

如果直接运行,则不报错,用if语句对其进行判断,则显示false。

我的解答思路和尝试过的方法

参考网上代码后,已根据本机运行环境对服务器名,SQL Server的数据库名,用户名,以及密码都进行了修改。通过这些信息,对python和SQL Server已成功地进行了连接,以确保这些信息无误

我想要达到的结果

成功进行连接

查看open方法是否有返回值
如果open方法没有返回值
你需要判断isOpened属性,而不是用一个变量去接

先确保用比如navicat能连

1、用navicat工具测试连接SQL Server是否成功,测试连接成功说明SQL Server服务没问题
2、SQL Server服务没问题的情况下,说明PyQt5代码连接有问题,检查一下PyQt5.QtSql 模块是否安装成功

检查一下python连接SQLServer驱动是否安装正确

PyQt5使用QSqlDatabase类连接数据库。

一般可以使用其静态方法addDatabase()来创建QSqlDatabase对象。addDatabase()方法有两个参数,第一个参数是驱动名称字符串,比如“QODBC”;第二个参数是连接名称字符串,由用户自行定义,也可以省略,省略时创建默认数据库连接。QSqlDatabase对象创建后,可以使用静态方法database()获取其引用,其第一个参数是数据库名称字符串,第二个参数是布尔值(默认值为True),用于设置是否打开数据库,如果两个参数都省略,返回默认数据库并打开。

创建数据库对象后需要对其进行设置,相关的设置方法有setHostName()、setPort()、setDatabaseName()、setUserName()、setPassword()等。在使用ODBC驱动时,setDatabaseName()比较重要,它的参数可以是DSN名称,也可以是数据库连接字符串。这些设置必须在数据库打开前完成,否则无效。

数据库对象设置完毕后,使用open()方法打开,使用close()方法关闭。

PyQt5使用QSqlQuery对象操作数据库。

可使用QSqlQuery(database)构造方法来创建数据库对象,如果省略参数,则使用默认数据库连接。

可使用QSqlQuery的exec()方法执行SQL语句。

举例:连接Sql Server数据库并获取所有数据库名称。

#导入QtSql模块
from PyQt5.QtSql import QSqlDatabase, QSqlQuery

#创建数据库连接并打开(未指定数据库名,创建默认连接)
db = QSqlDatabase.addDatabase("QODBC")
db.setDatabaseName("Driver={Sql Server};Server=localhost;Database=master;Uid=sa;Pwd=123456")
db.open()

#创建查询对象(使用默认数据库连接)
query = QSqlQuery()

#查询数据库名(保存在master.sys.databases表中)
query.exec("Select name From sys.databases")

#依次打印数据库名(系统数据库除外)
while query.next():
#获取名称字段的值
name = query.value("name")
#如果不是系统数据库,打印之
if name.lower() not in ('master', 'tempdb', 'model', 'msdb'):
print(name)

#关闭数据库
db.close()