2014-04-22 2 views
1

주어진 sqlalchemy 테이블 (sqlalchemy.schema.Table)에 정확하게 0 행이 있는지 알아야합니다. 나는 각각에 많은 행을 가진 많은 테이블을 가지고 있으며, 이것은 시작시에 이들 모두를 위해 실행되어야하므로 런타임 관점에서 이것을 수행하는 가장 효율적인 방법을 찾고있다. 그래서, 단지 카운트를하는 것이 내가 찾고있는 것이 아닙니다. 데이터베이스가 PostgreSQL이면 변경됩니다.sqlalchemy 테이블이 비어 있는지 확인하십시오.

+0

실제 카운트가 필요합니까? 아니면 그들이 0보다 큰가? –

+0

@DavidS 비어 있는지 여부 – scottmrogowski

답변

2

SQLAlchemy를 사용하면 "원시"쿼리를 수행 할 수 있습니다. PostgreSQL의에서는 레코드 수를 얻을 수 n_live_tup에 대한 메타 데이터를 조회 할 수 있습니다

SELECT 
    schemaname as schema_name, 
    relname as table_name, 
    n_live_tup as record_count 
FROM pg_stat_user_tables WHERE n_live_tup > 0; 

분명이 당신에게 살아있는 기록을 가진 모든 테이블을 제공합니다. 없는 것만 원할 경우 WHERE n_live_tup = 0으로 변경하고 특정 테이블로만 제한하려면 table_name = <<your_table_name>>을 where 절에 추가하십시오. 당신은 권한이있는 역할을하지 않으며, 테이블이 비어있는 경우 그냥보고 싶다면

, 당신은 항상 곁에이 작업을 수행 할 수 있습니다 테이블 레코드가있는 경우

SELECT True FROM <<your_table_name>> LIMIT 1; 

이는 true를 돌려줍니다 그렇지 않으면 NULL입니다. dbsessionmaker() 객체입니다

+0

자세한 답변을 보내 주셔서 감사합니다. 두 번째 접근법은 내가 찾고있는 것입니다. 그러나 원시 SQL은 깨끗한 코드 관점에서 일반적인 아니오이므로 SQLAlchemy 래퍼만으로는 그렇게 할 수있는 방법이 있는지 궁금합니다. – scottmrogowski

+1

원시 SQL에 대한 혐오감을 이해하지 못했습니다. (어쨌든 ORM이 ORM을 생성 할 것입니다.) SQLAlchemy ORM에 대해서는 first()를 사용할 것입니다. 문서에 따르면 한계는 1입니다. 개체를 다시 가져 오면 테이블에 데이터가있는 것입니다. –

0

당신은

db.query(Table_Name).first() 

을 use- 수 있습니다. 감사합니다 @ David S

관련 문제