Найти - Пользователи
Полная версия: PyQt4 + SQLite. QtSql.QSqlQuery.bindvalue
Начало » Базы данных » PyQt4 + SQLite. QtSql.QSqlQuery.bindvalue
1
Pluto
Моя программа получает данные из одной таблицы: FAM, IM, OT
А затем делает выборку на каждую персону из другой таблицы, при этом

queryFIO = QtSql.QSqlQuery(connection)
queryFIO.exec("SELECT FAM, IM, OT FROM FIOTABLE")
queryBBB = QtSql.QSqlQuery(connection)
queryBBBtext = "SELECT BUM, BAM, BOM FROM BUMTABLE WHERE FAM = ? AND IM = ? AND OT = ?"
while queryFIO.next():
  record = query.record()
  A_FAM = record.value("FAM")
  A_IM = record.value("IM")
  A_OT = record.value("OT")
  queryBBB.prepare(queryBBBtext)
  queryBBB.bindValue(A_FAM)
  queryBBB.bindValue(A_IM)
  queryBBB.bindValue(A_OT)
  queryBBB.exec_()

Если в FIOTABLE, допустим, поле FAM содержит Null, то в соответствующий A_FAM запишется PyQt4.QtCore.QPyNullVariant object, который НИФИГА не равен себе подобным, если получен из других полей или строк БД.
Т.е. queryBBB не найдёт такие же FAM, IM, OT во второй таблице.

Как прибиндить null???

Можно сделать проверку
type(record.value(“FAM”)) == QtCore.QPyNullVariant
а дальше что?
Что вместо этого QtCore.QPyNullVariant биндить в соответствующее поле, чтобы итоговый SQL был равнозначен:
SELECT BUM, BAM, BOM FROM BUMTABLE WHERE FAM = Null, IM = “БОБЁР”, OT = “БОБРОВИЧ”
Pluto
Мысленно плюнул в монитор, мысленно снеся его со стола, и стал генерировать строку запроса, перед тем как прибиндить туда значения.
queryBBBtext = “SELECT BUM, BAM, BOM FROM BUMTABLE WHERE FAM is Null and IM = ? and OT = ?”

Т.е. теперь те значения, которые содержат этот чёртов Null, более никуда не биндятся. Изменяется сам текст SQL-запроса для prepare.
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