On Tue, 21 Dec 2010 11:05:03 +0100, TP <paratribulati...@free.fr> wrote: > Hello, > > I currently use the API 1, and use the isNull() method of QVariant to > detect > a Null QVariant. This is necessary to detect a NULL value in a database. > > It seems there is no equivalent in API2 of PyQt. None is used to model an > invalid QVariant. But how to model a Null QVariant? > > http://www.riverbankcomputing.co.uk/static/Docs/PyQt4/pyqt4ref.html#id13 > > Compare the output of the two following examples. > > Thanks > > Julien > > ######################## > # Example 1: using API 1 for QVariant > > from PyQt4.QtSql import * > import sys > > db = QSqlDatabase.addDatabase( "QSQLITE" ) > db.setDatabaseName( ":memory:" ) > > if not db.open(): > sys.exit(1) > > query = QSqlQuery() > > query.exec_( "CREATE TABLE person ( firstname VARCHAR(20)" > ", lastname VARCHAR(20) );" ) > query.exec_( "INSERT INTO person VALUES( 'Danny', 'Young');" ) > query.exec_( "INSERT INTO person ( firstname ) VALUES( 'Christine' );" ) > query.exec_( "INSERT INTO person VALUES( 'Lars', 'Gordon');" ) > > query.exec_( "SELECT * FROM person;" ) > > record = query.record() > for i in range( record.count() ): > print record.fieldName( i ), "\t", > > print "\n----------------------------" > > for i in range( record.count() ): > while query.next(): > for i in range( record.count() ): > value = query.value(i) > if value.isNull(): > print "NULL", "\t", > else: > print value.toString(), "\t", > print > > ######################## > # Example 2: using API 2 for QVariant > > import sys, sip > sip.setapi('QVariant', 2) > > from PyQt4.QtSql import * > > db = QSqlDatabase.addDatabase( "QSQLITE" ) > db.setDatabaseName( ":memory:" ) > > if not db.open(): > sys.exit(1) > > query = QSqlQuery() > > query.exec_( "CREATE TABLE person ( firstname VARCHAR(20)" > ", lastname VARCHAR(20) );" ) > query.exec_( "INSERT INTO person VALUES( 'Danny', 'Young');" ) > query.exec_( "INSERT INTO person ( firstname ) VALUES( 'Christine' );" ) > query.exec_( "INSERT INTO person VALUES( 'Lars', 'Gordon');" ) > > query.exec_( "SELECT * FROM person;" ) > > record = query.record() > for i in range( record.count() ): > print record.fieldName( i ), "\t", > > print "\n----------------------------" > > for i in range( record.count() ): > while query.next(): > for i in range( record.count() ): > value = query.value(i) > if value == None: > print "NULL", "\t", > else: > print value, "\t", > print
The short answer is that you can't. However... QVariant::isNull() typically delegates to the enclosed data's isNull() method (eg. QString::isNull()). So your example for API v1 will also work for API v2. It gets a bit more complicated if you are also using the QString v2 API because a null QString and an empty QString are both converted to an empty unicode object (although None is converted to a null QString when going in the other direction). I chose this asymmetric behaviour because QString() creates a null QString when often what is really meant is an empty QString. BTW, use "value is None" rather than "value == None". Phil _______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt