Get the number of rows in table using SQLAlchemy
Question:
I am using SQLAlchemy in Python, and I want to know how to get the total number of rows in a column. I have variables defined:
engine = sqlalchemy.create_engine(url, ehco=False)
Session = sqlalchemy.orm.sessionmaker(bind=engine)
Session = session()
metadata = sqlalchemy.MetaData(engine)
Base = declarative_base(metadata=metadata)
# A class representing the shape_congress_districts_2012 table
class Congress(Base):
__tablename__ = 'shape_congress_districts_2012'
id = geoalchemy.Column(sqlalchemy.Integer, primary_key=True)
name = geoalchemy.Column(sqlalchemy.Unicode)
geom = geoalchemy.GeometryColumn(geoalchemy.Polygon(2))
geom_simple = geoalchemy.GeometryColumn(geoalchemy.Polygon(2))
area = geoalchemy.Column(sqlalchemy.Float)
state_id = geoalchemy.Column(sqlalchemy.Integer)
census_year = geoalchemy.Column(sqlalchemy.Date)
geoalchemy.GeometryDDL(Congress.__table__)
I want to determine the total number of rows in the table without having to wait a whole bunch of time querying the database. Currently, I have a bit of code:
rows = session.query(Congress).all()
Then I can access them from list, but this requires me to load everything into memory at once.
Answers:
This should work
rows = session.query(Congress).count()
EDIT: Another way related to my first try
from sqlalchemy import func
rows = session.query(func.count(Congress.id)).scalar()
The below worked for me:
conn = engine.connect()
query = """SELECT count(*) FROM [dbo].[YourTable_Name]"""
exe = conn.execute(query)
row_count = exe.scalar()
Using the ORM:
from sqlalchemy import func
with session() as session:
length = session.scalar(select(func.count()).select_from(table_class))
Or if you want a type-hinted function:
def get_table_size(session: sessionmaker, table_class: type[SQLTable]) -> int:
"""
Get the number of rows a table has
:param session: An SQLAlchemy session
:param table_class: A class that inherits from `sqlalchemy.Base` and represents a table
:return: integer
"""
with session() as session:
return session.scalar(select(func.count()).select_from(table_class))
I am using SQLAlchemy in Python, and I want to know how to get the total number of rows in a column. I have variables defined:
engine = sqlalchemy.create_engine(url, ehco=False)
Session = sqlalchemy.orm.sessionmaker(bind=engine)
Session = session()
metadata = sqlalchemy.MetaData(engine)
Base = declarative_base(metadata=metadata)
# A class representing the shape_congress_districts_2012 table
class Congress(Base):
__tablename__ = 'shape_congress_districts_2012'
id = geoalchemy.Column(sqlalchemy.Integer, primary_key=True)
name = geoalchemy.Column(sqlalchemy.Unicode)
geom = geoalchemy.GeometryColumn(geoalchemy.Polygon(2))
geom_simple = geoalchemy.GeometryColumn(geoalchemy.Polygon(2))
area = geoalchemy.Column(sqlalchemy.Float)
state_id = geoalchemy.Column(sqlalchemy.Integer)
census_year = geoalchemy.Column(sqlalchemy.Date)
geoalchemy.GeometryDDL(Congress.__table__)
I want to determine the total number of rows in the table without having to wait a whole bunch of time querying the database. Currently, I have a bit of code:
rows = session.query(Congress).all()
Then I can access them from list, but this requires me to load everything into memory at once.
This should work
rows = session.query(Congress).count()
EDIT: Another way related to my first try
from sqlalchemy import func
rows = session.query(func.count(Congress.id)).scalar()
The below worked for me:
conn = engine.connect()
query = """SELECT count(*) FROM [dbo].[YourTable_Name]"""
exe = conn.execute(query)
row_count = exe.scalar()
Using the ORM:
from sqlalchemy import func
with session() as session:
length = session.scalar(select(func.count()).select_from(table_class))
Or if you want a type-hinted function:
def get_table_size(session: sessionmaker, table_class: type[SQLTable]) -> int:
"""
Get the number of rows a table has
:param session: An SQLAlchemy session
:param table_class: A class that inherits from `sqlalchemy.Base` and represents a table
:return: integer
"""
with session() as session:
return session.scalar(select(func.count()).select_from(table_class))