我正在尝试使用 PyQt6.QtSql 中的 QSqlQuery 在 PostgreSQL 数据库上创建一个表。 执行下面的代码没有任何效果!
import sys
from PyQt6.QtSql import QSqlDatabase, QSqlQuery
con = QSqlDatabase.addDatabase('QPSQL')
con.setDatabaseName('test')
if not con.open('test', 'test'):
print("Something went wrong!")
sys.exit(1)
query = QSqlQuery()
query.exec("""
CREATE TABLE contacts(
id serial primary key,
name varchar(40) not null,
job varchar(50),
email varchar(40) not null
)
""")
print(con.tables())
我在 pgAdmin4 中运行了查询;有用。然后我在其中插入一行并将表名称更改为“a-table”。
我将 CREATE 查询更改为 SELECT 查询并得到结果;连接正常。
按原样运行上述代码会产生以下结果:
qt.core.qobject.connect: QObject::connect(QObject, Unknown): invalid nullptr parameter
['a-table']
PostgreSQL 版本是 16.1。 Python版本是3.12.0。 PyQt 版本是 6.6.1。全部运行在 Windows 10 Pro 22h2 上。
这开始是一条评论,但我想添加一些代码。
QPSQL 应该可以正常工作,只要它可以在某处找到
libpq.dll
的副本。对于 Windows 上的我来说,最简洁的方法是安装官方 ODBC 驱动程序并将其 bin
文件夹添加到我的系统路径中。
我落后了几个版本(12.02),我的
libpq.dll
路径是C:\Program Files\psqlODBC\1202\bin
。如果您深入 pgAdmin4 目录,您会发现它有自己的 libpq.dll 副本。
如果您不想(或不能!)编辑系统路径,您还可以将
libpq.dll
复制到 qpsqlsql.dll
所在的文件夹。如果你能找到的话!它将被埋在 site-packages\qt6_applications\Qt\plugins 周围的某个地方。
这里有一些适用于 QPSQL 的代码。我通常会在任何新项目中保留此代码的副本,因为我总是忘记在新计算机上安装 ODBC 驱动程序并修改路径。
import sys
from PyQt6.QtSql import (QSqlQuery, QSqlDatabase, QSqlDriver)
from PyQt6.QtWidgets import QApplication
app = QApplication(sys.argv)
print(QSqlDatabase.drivers())
pgtest = QSqlDatabase.addDatabase("QPSQL")
pgtest.setHostName('MyHost')
pgtest.setDatabaseName('MyDb')
pgtest.setUserName('myuser')
pgtest.setPassword('mypassword')
print('pgtest.open: ', pgtest.open())
query = QSqlQuery(pgtest)
query.exec('''SELECT * from MyTable''')
print('query.rowCount() ', query.size())
print('last error ', query.lastError().text())
print('pgtest.open: ', pgtest.open())