The boundary that is a file, not a shared database

A batch job in another language integrated through a shared schema couples the two deployments; integrated through a file it does not.

PHP writes a CSV to object storage, emits an event.
Python reads it, writes a result file, emits an event.
PHP reads the result.

what this avoids:
  a shared schema, and a migration that breaks both
  an ORM model maintained twice
  a deployment order between them

what it costs:
  latency, and a format nobody owns unless somebody does.

A file with a documented schema is a weaker coupling than a shared table and is much easier to reason about during an incident, because the artefact can be inspected. The failure mode is the format drifting silently, so a header check on read is worth the six lines — and naming an owner for the format is what stops it drifting at all.