Postgresql 检查sqlalchemy表是否为空

Postgresql 检查sqlalchemy表是否为空,postgresql,sqlalchemy,Postgresql,Sqlalchemy,我需要知道任何给定的sqlalchemy表(sqlalchemy.schema.table)是否正好有0行。我有很多表,每个表中都有很多行,在启动时必须为所有表运行这些行,因此我正在寻找从运行时的角度执行此操作的最有效方法。所以,仅仅做一个计数并不是我想要的。数据库是PostgreSQL,如果这改变了什么,SQLAlchemy将允许您执行“原始”查询。在PostgreSQL中,您可以查询n_live_tup的元数据以获取记录计数: SELECT schemaname as schema_n

我需要知道任何给定的sqlalchemy表(sqlalchemy.schema.table)是否正好有0行。我有很多表,每个表中都有很多行,在启动时必须为所有表运行这些行,因此我正在寻找从运行时的角度执行此操作的最有效方法。所以,仅仅做一个计数并不是我想要的。数据库是PostgreSQL,如果这改变了什么,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\u live\u tup=0
,如果要将其限制为仅某个表,请将
table\u name=
添加到WHERE子句

如果您没有具有权限的角色,并且您只想查看表是否为空,则始终可以执行以下操作:

SELECT True FROM <<your_table_name>> LIMIT 1;
从限制1中选择True;
如果表有记录,则返回True;如果表没有记录,则返回NULL。

您可以使用-

    db.query(Table_Name).first()

其中
db
sessionmaker()
对象。谢谢@David S

您需要实际计数吗?或者,如果它们的值大于0?@DavidS,则不管它们是否为空,都可以获得详细的答案。第二种方法正是我想要的。然而,我想知道是否有一种方法可以仅使用SQLAlchemy包装器来实现这一点,因为从干净的代码角度来看,原始SQL是一个普遍的禁忌。我从来都不理解对原始SQL的厌恶(毕竟,您的ORM将生成它),但是对于SQLAlchemy ORM,您只需要使用first()。根据文件,这是一个限制1。如果您取回一个对象,表中就有数据。