Найти - Пользователи
Полная версия: Python 3. PyQt4. PyQNullVariant сравнение данных
Начало » Базы данных » Python 3. PyQt4. PyQNullVariant сравнение данных
1
Pluto
Программа делает выборку, затем бежит по ней и сравнивает текущее значение в выборке с предыдущим.

from PyQt4 import QtSql, QtGui
class win(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.connect()
        
        self.hop()
    def connect(self):
        self.conn = QtSql.QSqlDatabase.addDatabase("QSQLITE")
        self.conn.setDatabaseName("D:\DB.sqlite3")
        self.conn.open()
        print (self.conn.lastError().text())
    def hop(self):
        query = QtSql.QSqlQuery(self.conn)
        query.exec("SELECT myfield FROM mytable ORDER BY myfield)
        tmp_myfield = None
        while query.next():
            record = query.record()
            ident = True
            if tmp_myfield != record.value("myfield"):
                ident = False
            
            print (tmp_myfield, record.value("myfield"), ident) # выводим на экран предыдущее значение поля и текущее, а также результат их сравнения
            if ident == False:
                tmp_myfield = record.value("myfield")
if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    w = win()
    w.show()
    sys.exit(app.exec_())

Получаем следующее:

None <PyQt4.QtCore.QPyNullVariant object at 0x02EDC880> False
<PyQt4.QtCore.QPyNullVariant object at 0x02EDC880> <PyQt4.QtCore.QPyNullVariant object at 0x02EDC848> False
<PyQt4.QtCore.QPyNullVariant object at 0x02EDC848> <PyQt4.QtCore.QPyNullVariant object at 0x02EDC8B8> False
<PyQt4.QtCore.QPyNullVariant object at 0x02EDC8B8> <PyQt4.QtCore.QPyNullVariant object at 0x02EDC880> False
<PyQt4.QtCore.QPyNullVariant object at 0x02EDC880> <PyQt4.QtCore.QPyNullVariant object at 0x02EDC848> False
<PyQt4.QtCore.QPyNullVariant object at 0x02EDC848> <PyQt4.QtCore.QPyNullVariant object at 0x02EDC8B8> False
<PyQt4.QtCore.QPyNullVariant object at 0x02EDC8B8> <PyQt4.QtCore.QPyNullVariant object at 0x02EDC880> False
<PyQt4.QtCore.QPyNullVariant object at 0x02EDC880> <PyQt4.QtCore.QPyNullVariant object at 0x02EDC848> False
<PyQt4.QtCore.QPyNullVariant object at 0x02EDC8B8> <PyQt4.QtCore.QPyNullVariant object at 0x02EDC880> False
<PyQt4.QtCore.QPyNullVariant object at 0x02EDC880> <PyQt4.QtCore.QPyNullVariant object at 0x02EDC848> False
<PyQt4.QtCore.QPyNullVariant object at 0x02EDC848> <PyQt4.QtCore.QPyNullVariant object at 0x02EDC8B8> False
<PyQt4.QtCore.QPyNullVariant object at 0x02EDC8B8> <PyQt4.QtCore.QPyNullVariant object at 0x02EDC880> False
<PyQt4.QtCore.QPyNullVariant object at 0x02EDC880> <PyQt4.QtCore.QPyNullVariant object at 0x02EDC848> False
БАБАЙКА БАБАЙКА True

И как же мне сделать так, чтобы пустое значение РАВНЯЛОСЬ другому пустому значению.
Чего он мне сравнивает не значения, а объекты, заявляя, что нулевой объект по адресу 123 не равен нулевому объекту по адресу 321?
Как сравнивать-то?
Тут Null и там Null ident ДОЛЖЕН БЫТЬ True!!!!!! А он False!
Как быть?
Pluto
Безобразие! Пришлось вводить дополнительную переменную, которая получает значение из record.value(“myfield”), с предварительной проверкой его через type на QtCore.QPyNullVariant. Если этот самый чёртов пиНульВариант имеет место быть, то в переменную записываем None.

Дальше сравнения делаем именно с этой дополнительной переменной.

А по-другому никак? Лишние переменные как-то не радуют.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB