Python Sql Alchemy gera tabela com VARCHAR para SQL Lite em vez de INTEGER, então selecione para SQL Lite ordenado por número alfabético
Dada a tabela City no SQL Lite gerada pelo SQL Alchemy:
class City(Base):
__tablename__ = "city"
id: Mapped[int] = mapped_column(Integer, primary_key=True, index=True)
city_name: Mapped[str] = mapped_column(String, index=True)
Dados:
15470 Paris
100567 Paris
Consulta:
select(City).where(City.city_name == city_name.upper()).order_by(City.id).limit(1)
SELECT city.id, city.city_name
FROM city
WHERE city.city_name = :city_name_1 ORDER BY city.id
LIMIT :param_1
retorna o ID da cidade com 100567 em vez de 15470.
Preciso fornecer um exemplo com inserção SQL também?
No SQLite, se a coluna id for armazenada como TEXT em vez de INTEGER, o ORDER BY classificará em ordem alfabética, não numérica.
É por isso que '100567' pode vir antes de '15470'.
Para corrigir isso, você deve converter id para um inteiro ao ordenar: