postgresql 在PyQt6>QtSql>QSqlQuery上执行任何操作

eufgjt7s  于 2024-01-07  发布在  PostgreSQL
关注(0)|答案(1)|浏览(153)

我正在尝试使用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())

字符串
我在pgAdmin 4中运行了这个查询;它工作了。然后我在其中插入了一行,并将表名改为“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 22 h2上。

kcwpcxri

kcwpcxri1#

这开始是一个注解,但我想添加一些代码。
QPSQL应该可以正常工作,只要它能在某个地方找到libpq.dll的副本。对我来说,在Windows上,最干净的方法是安装官方的ODBC driver并将其bin文件夹添加到我的系统PATH中。
我的版本比12.02晚了几个版本,我的libpq.dll路径是C:\Program Files\psqlODBC\1202\bin。如果你在pgAdmin 4目录中查找,你会看到它有自己的libpq.dll副本。
如果你不想(或者不能!)编辑你的系统路径,你也可以复制libpq.dllqpsqlsql.dll所在的文件夹中。如果你能找到它!它会被埋在site-packages\qt 6_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())

字符串

相关问题