т.е.
Код: Выделить всё
# This is what's stored in the DB
{
"nonce": "abcdefg",
"data": "wefgsafawfasdadsfsa"
}
Таблица My SQLAlchemy User настроена для обработки этих зашифрованных данных как гибридного_свойства, где она расшифровывает и возвращает фактическое значение открытого текста при доступе:
Таблица My SQLAlchemy User настроена для обработки этих зашифрованных данных как гибридного_свойства, где она расшифровывает и возвращает фактическое значение открытого текста при доступе:
Таблица My SQLAlchemy User настроена для обработки этих зашифрованных данных как гибридного_свойства, где она расшифровывает и возвращает фактическое значение открытого текста при доступе:
Таблица My SQLAlchemy User р>
Код: Выделить всё
import json
from encryption_lib import decrypt
class User(Model):
__tablename__ == "user"
id = Column(Integer, primary_key=True)
_private1 = Column("private1", Text)
_private2 = Column("private2", Text)
@hybrid_property
def private1(self):
json_data = json.loads(self._private1)
nonce = json_data["nonce"]
data = json_data["data"]
return decrypt(nonce, data) # Decrypt the value so the application can use it when queried
@private1.setter
def private1(self, encrypted):
nonce = encrypted[0]
data = encrypted[1]
self._private1 = json.dumps({"nonce": nonce, "data": data}) # Save the pre-encrypted value to database
# private2 is set up the same way as above
Код: Выделить всё
# ilike (errors)
db.session.query(User).filter(User.private1.ilike(f"%{searchterm}%")).all()
# func.sum (errors)
db.session.query(func.sum(User.private2)).scalar()
Проблема в том, что sqlalchemy возвращает User.private1 как InstrumentedAttribute вместо фактической строки шифрования из базы данных, поэтому при запуске json.loads() происходит сбой, поскольку данные является на самом деле это не JSON.
Как мне выполнить поиск по этим гибридным свойствам с помощью ilike и func?
Подробнее здесь: https://stackoverflow.com/questions/793 ... edattribut
Мобильная версия