Уведомления

Группа в Telegram: @pythonsu

#1 Июль 29, 2015 10:16:17

Pluto
Зарегистрирован: 2012-05-29
Сообщения: 177
Репутация: +  1  -
Профиль   Отправить e-mail  

PyQt4 + SQLite. QtSql.QSqlQuery.bindvalue

Моя программа получает данные из одной таблицы: 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 (Июль 29, 2015 14:50:42)

Офлайн

#2 Июль 29, 2015 14:50:00

Pluto
Зарегистрирован: 2012-05-29
Сообщения: 177
Репутация: +  1  -
Профиль   Отправить e-mail  

PyQt4 + SQLite. QtSql.QSqlQuery.bindvalue

Мысленно плюнул в монитор, мысленно снеся его со стола, и стал генерировать строку запроса, перед тем как прибиндить туда значения.
queryBBBtext = “SELECT BUM, BAM, BOM FROM BUMTABLE WHERE FAM is Null and IM = ? and OT = ?”

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

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version