from sqlalchemy import ( Column, DateTime, ForeignKey, Integer, MetaData, Numeric, String, Table, create_engine, func, select, ) from sqlalchemy_pgview import MaterializedView, View # Create engine and metadata engine = create_engine("postgresql://postgres:postgres@localhost/postgres") metadata = MetaData() # Define some tables users = Table( "users", metadata, Column("id", Integer, primary_key=True), Column("name", String(100)), Column("email", String(100)), ) orders = Table( "orders", metadata, Column("id", Integer, primary_key=True), Column("user_id", Integer, ForeignKey("users.id")), Column("total", Numeric(10, 2)), Column("created_at", DateTime, server_default=func.now()), ) active_users = View( "active_users", select(users.c.id, users.c.name, users.c.email), metadata=metadata, ) monthly_sales = MaterializedView( "monthly_sales", select( func.date_trunc("month", orders.c.created_at).label("month"), func.count(orders.c.id).label("order_count"), func.sum(orders.c.total).label("revenue"), ).group_by(func.date_trunc("month", orders.c.created_at)), with_data=True, metadata=metadata, ) # Create tables metadata.create_all(engine) # metadata.drop_all(engine)