모든 쿼리 결과를 검색하고 싶습니다. 내가 query.count() == 3000
를 참조SQLAlchemy의 모든 결과 쿼리 0.7.10
engine = sqlalchemy.create_engine(...)
Base = declarative_base()
class Something(Base):
...
Session = sessionmaker(bind=engine)
session = Session()
query = session.query(Something).filter(...).all()
,하지만 난 results = query.all()
을하려고 할 때, 난 단지 (즉 len(results) == 1
)을 하나의 행을 얻을 : 같은 내 코드 보인다.
제 생각에 query.all()
은 쿼리를 실행하고 모든 결과 목록을 반환합니다. 내가 여기서 뭔가를 놓치고 있니? 계산 된 행 수가 반환 된 행 수보다 클 수있는 이유는 무엇입니까?
편집 (좀 더 세부 사항) :
원시 SQL을 복용 (예 : str(query)
보고 파라미터의 치환을)과 session.execute
로 전달이 잘 작동하는 것 같다 :
# this gives 3000 rows
for row in session.execute(raw_sql, {'param1': val1, 'param2': val2}):
print(row)
솔루션
내 기본 키가 고유하지 않은 것이 문제였습니다. 수업을 듣고 : 수업을 준비 할 때 매우주의해야합니다! 내 경우에는 다음과 같았습니다 :
class Something(Base):
row_id_1 = Column(Integer, primary_key=True)
row_id_2 = Column(Integer) # PROBLEM! Need to specify primary_key=True
value = Column(Float)
기본 키가 조합 (row_id_1, row_id_2)이므로 문제가 발생했습니다.
'execute()'에서 반환되는 몇 가지 레코드와 함께 전체 "Something"클래스 정의를 게시 할 수 있습니까? –
아하, 실제로 내 수업의 장난감 예를 만들려고 할 때 내 제안을 통해이 문제를 해결할 수있었습니다. 내 기본 키가 고유하지 않은 것이 문제였습니다. 이것은 count()에서도 괜찮지 만, 분명히 SQL Alchemy는 고유하지 않은 경우 기본 키의 첫 번째 인스턴스 만 반환합니다. 나는이 행동을 기대하지 않았다. 감사합니다. – Max
문제 없습니다, 그게 문제라고 생각했습니다. 나는이 질문에 미래에 일어나는 사람들을 위해 좀 더 복잡한 대답을 썼다. –