PyQt и Postgresql: синтаксическая ошибка в простом запросе, который работает в PSQL - PullRequest
1 голос
/ 17 июня 2020

Я уверен, что это очень просто, но я не могу заставить этот базовый c запрос работать с PyQt5 с использованием Q PSQL.

import sys
from PyQt5.QtSql import *

class Main():

    def __init__(self, parent=None):
        SQL = "SELECT address FROM organisation_addresses WHERE organisation_id = ?"
        query = QSqlQuery()
        query.prepare(SQL)
        query.addBindValue(12)       
        query.exec_(SQL)
        query.first()

        if query.isActive():
                print(query.value("address"))
        else:
            print(query.lastError().text())

if __name__=="__main__":
    db = QSqlDatabase.addDatabase("QPSQL");
    db.setHostName(server)
    db.setDatabaseName(database)
    db.setUserName(user)
    db.setPassword(pword)
    if (db.open()==False):
        QMessageBox.critical(None, "Database Error", db.lastError().text())

    myapp = Main()

Если я изменю запрос на «ВЫБРАТЬ адрес FROM organisation_addresses WHERE organisation_id = 85», закомментируйте query.prepare и query.addBindValue, запрос будет работать нормально. Кажется, мне не нравится мой «?».
Когда я запускаю запрос в psql, он также работает правильно.

Когда я запускаю select version () на Postgres, я получаю:

PostgreSQL 10.12 (Ubuntu 10.12-0ubuntu0.18.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0, 64-bit

Я пробовал запрос в PyQt на Linux Mint 19.3, Ubuntu 20.04 и Windows 10. Тот же результат. Любые идеи?

1 Ответ

0 голосов
/ 17 июня 2020

Если вы собираетесь использовать заполнитель, вы не должны передавать запрос в exe c (), поскольку QSqlQuery уже имеет оператор, используйте только:

SQL = "SELECT address FROM organisation_addresses WHERE organisation_id = ?"
query = QSqlQuery()
query.prepare(SQL)
query.addBindValue(12)       
query.<b>exec_()</b>
query.first()

if query.isActive():
    print(query.value("address"))
else:
    print(query.lastError().text())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...