2013-06-13 13 views
5

W SQLAlchemy, ModelName.query.filter_by(field_name=value).count() zwraca poprawną liczbę rekordów, ale ModelName.query.filter_by(field_name=value).all() zwraca tylko jeden rekord. Wykonanie db.session.execute("SELECT * FROM table_name WHERE field_name = 'value'") działa dobrze. Czy ktoś miał podobny problem? Czy ktoś ma pojęcie, co może być nie tak. Wszelkie wskazówki pomogą.Flask-SQLAlchemy inna liczba rekordów dla .count() i .all()

informacje, które mogą być pomocne
używam MS SQL Server 2008 R2 i dostępu do niego za pomocą FreeTDS/pyodbc. Nie kontroluję bazy danych i nie mogę jej zmienić.

Z góry dziękuję.

+3

spróbuj wyłączyć 'SQLALCHEMY_ECHO' do' true' więc można zobaczyć, co SQL instrukcje są opalane, a potem rzucić okiem, aby zobaczyć, czy ' .all() 'query robi coś nieoczekiwanego. – Doobeh

+6

należy pamiętać o tym, że jeśli zapytanie zwraca więcej niż jeden wiersz z tym samym kluczem podstawowym, zapytanie do całej klasy encji spowoduje zduplikowanie tych wierszy. Ale count() pokaże faktyczną liczbę wierszy, które zostaną zwrócone bez względu na klucz podstawowy. – zzzeek

+0

Czy możesz wypróbować jeden z innych sterowników, takich jak pymssql (zobacz listę pod http://docs.sqlalchemy.org/en/rel_0_8/dialects/mssql.html) i sprawdzić, czy problem nadal występuje? Pamiętam, że pyodbc wykazywał pewne dziwactwa, gdy próbowałem go z SQL Server. Ale minęło trochę czasu i użyłem go tylko bezpośrednio, nie przez SQLAlchemy. Dlatego przerzuciłem się na CeODBC, który był znacznie bardziej niezawodny i szybszy. Ale niestety nie obsługiwane przez SQLAlchemy. Mimo to wypróbowałbym jedną z pozostałych opcji, jakie masz. –

Odpowiedz

0

Funkcja all() zwróci listę i count() zwróci liczbę ...

Powiązane problemy