Mysql
 sql >> Base de données >  >> RDS >> Mysql

SqlAlchemy ne renvoie pas toutes les lignes lors de l'interrogation de l'objet de table, mais renvoie toutes les lignes lorsque j'interroge la colonne de l'objet de table

J'ai rencontré une situation similaire où .all() de l'objet de requête SQLAlchemy ne renvoie pas toutes les lignes du tableau (il en manque toujours certaines) mais .count() l'appel donne le compte correct. Après avoir creusé un peu plus, j'ai réalisé que la déclaration de modèle s'écartait du schéma de table réel dans cette base de données. Tout d'abord, la base de données a une seule colonne de clé primaire dans le schéma mais la déclaration de modèle a une clé primaire de composition (dans le cas inverse comme le vôtre), j'ai également manqué une contrainte unique à 3 colonnes où, comme le schéma de table l'a.

Ce qui s'est passé dans mon cas, c'est que chaque fois que SQL Alchemy interrogeait la base de données, il obtenait toutes les lignes derrière la scène, mais en raison de la clé primaire de composition incorrecte dans ma déclaration de modèle, certaines lignes se chargeaient dans la session de SQLAlchemy (les clés primaires par définition identifient de manière unique les objets et il ne chargera pas deux objets avec la même clé primaire dans la session en conséquence, il rejettera donc les colonnes de composition qui ont les mêmes valeurs même dans la base de données, elles ont des PK différents.)

En conclusion, revérifier la déclaration du modèle avec le schéma de la base de données pour s'assurer qu'ils sont synchronisés est la première réponse à ce type de problèmes.