Вот как выглядит моя таблица: введите здесь описание изображения
Вот как я это создал:
Код: Выделить всё
comando = '''CREATE TABLE Pessoa (
cpf INTEGER NOT NULL,
nome TEXT NOT NULL,
nascimento DATE NOT NULL,
oculos BOOLEAN NOT NULL,
PRIMARY KEY (cpf)
);'''
Код: Выделить всё
class Pessoa:
def __init__(self, cpf, nome, data_nascimento, usa_oculos):
self.cpf = cpf
self.nome = nome
self.data_nascimento = data_nascimento
self.usa_oculos = usa_oculos
Код: Выделить всё
comando = '''SELECT * FROM Pessoa WHERE oculos=:usa_oculos;'''
cursor.execute(comando, {"usa_oculos": True})
registros = cursor.fetchall()
for registro in registros:
pessoa = Pessoa(*registro)
print("cpf:", type(pessoa.cpf), pessoa.cpf)
print("nome:", type(pessoa.nome), pessoa.nome)
print("nascimento:", type(pessoa.data_nascimento), pessoa.data_nascimento)
print("oculos:", type(pessoa.usa_oculos), pessoa.usa_oculos)
cpf: 20000000099
nome: < class 'str'> Хосе
насименто: 28 февраля 1990 г.
oculos: 1
cpf: 30000000099имя: Сильва
название: 30 марта 1990 г.
oculos: 1
Затем, чтобы преобразовать тип в oculos из int в логический, я создал эту функцию:
Код: Выделить всё
def converter_booleano(dado):
return True if dado == 1 else False
cpf: 20000000099
nome: < class 'str'> Хосе
насименто: 28 февраля 1990 г.
oculos: False
cpf: 30000000099
имя: Сильва
нашименто: 30 марта 1990
oculos: False
Обратите внимание, что он вернул False там, где на выходе было 1? Я протестировал изменение условия, чтобы оно возвращало False, если дадо == 0, иначе True, и результат был True. Очевидно, что у него возникли проблемы с соответствием условию, поэтому он всегда возвращает сценарий else. Я используюDetect_types=conector.PARSE_DECLTYPES при открытии соединения с БД.
Заранее спасибо.
Подробнее здесь: https://stackoverflow.com/questions/790 ... pe-boolean