PyQt6>QtSql>QSqlQuery 上的 exec 不执行任何操作

问题描述 投票:0回答:1

我正在尝试使用 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 上。

python postgresql pyqt
1个回答
0
投票

这开始是一条评论,但我想添加一些代码。

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())
© www.soinside.com 2019 - 2024. All rights reserved.