检查 sqlalchemy 表是否为空。

8

我需要知道任何给定的sqlalchemy表(sqlalchemy.schema.Table)是否有确切的0行。我有很多表格,每个表格中都有很多行,这必须在启动时运行所有表格,因此我正在寻找从运行时角度最有效的方法。因此,仅做计数不是我要找的东西。数据库是PostgreSQL,如果有变化,请告诉我。


你需要实际计数吗?还是只需要知道它们是否大于0? - David S
@DavidS 只是判断它们是否为空。 - scottmrogowski
2个回答

13

您可以使用-

    db.query(Table_Name).first()

其中db是一个sessionmaker()对象。感谢@David S的帮助。


3

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。


感谢您详细的回答。第二种方法正是我正在寻找的。不过,我想知道是否有一种只使用SQLAlchemy包装器的方法来实现这一点,因为从代码清洁的角度来看,原始SQL通常是不被推荐的。 - scottmrogowski
1
我从来没有理解过对原始 SQL 的厌恶(毕竟,你的 ORM 最终也会生成它),但对于 SQLAlchemy ORM,你只需要使用 first()。根据文档,它执行 limit 1。如果你得到一个对象返回,则表中有数据。 - David S

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接