Сравнение чисел в SQLAlchemy - PullRequest
0 голосов
/ 15 января 2019

Я хочу хранить нецелые числа в моей базе данных и иметь возможность сравнивать их для выявления дубликатов. Очевидно, что сравнение должно быть сделано с точностью до заданного числа десятичных знаков (скажем, 2). Итак, мой вопрос в двух словах: каков наиболее эффективный способ сделать это?

Моя первая попытка состояла в том, чтобы сохранить их как Числовые, в SQLAlchemy, это было бы:

class MyTable(Base):
    __tablename__ = 'mytable'
    x = Column(Numeric(2, 2))

и затем сделайте сравнение как

session = Session()  # this was configured elsewhere
query = session.query(MyTable)
query = query.filter(MyTable.x == y)  # y is a float
return session.query(query.exists()).scalar()

Теперь, это не удалось, условие, кажется, становится ложным, если я введу y как число с плавающей запятой.

Можно ли исправить вышеуказанный подход? Если нет, то какой самый чистый способ сделать то, что я хочу? (Каков компромисс между быстрым и чистым здесь?) Должен ли я прибегать к преобразованию моих данных в строки или целые числа? Или работать с неравенством ..?

1 Ответ

0 голосов
/ 15 января 2019

Я думаю, что решил это. Кажется, что числа будут сравниваться как строки, поэтому я должен преобразовать мое ссылочное значение в строку перед сравнением:

session = Session()  # this was configured elsewhere
query = session.query(MyTable)
query = query.filter(MyTable.x == f'{y:.2f}')  # y is a float
return session.query(query.exists()).scalar()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...