У меня есть функция, возвращающая объект запроса SQLAlchemy, и я хочу проверить эту функцию, чтобы она строила правильный запрос.
Например:
import sqlalchemy
metadata = sqlalchemy.MetaData()
users = sqlalchemy.Table(
"users",
metadata,
sqlalchemy.Column("email", sqlalchemy.String(255), nullable=False, unique=True),
sqlalchemy.Column("username", sqlalchemy.String(50), nullable=False, unique=True),
)
def select_first_users(n):
return users.select().limit(n)
def test_queries_are_equal(self):
expected_query = users.select().limit(10)
assert select_first_users(10) == expected_query # fails here
assert select_first_users(10).compare(expected_query) # fails here too
Я понятия не имею, как сравниватьдва запроса на равенство. ==
здесь не работает, потому что, насколько я вижу, у этих объектов не определен метод __eq__
, поэтому он сравнивает объекты по адресу в памяти и, безусловно, дает сбой. Метод compare
также выполняет сравнение is
.
Единственное решение, которое я вижу, выглядит так:
assert str(q1.compile()) == str(q2.compile())
, но странно и вместо него содержит заполнителифактических значений.
Так как я могу сравнить два запроса SQLAlchemy на равенство?
Я использую Python 3.7.4, SQLAlchemy==1.3.10
.