from sqlalchemy import create_engine, text
engine = create_engine("postgresql+psycopg://ai:ai@localhost:5532/ap")
with engine.begin() as conn:
invoice_id = conn.execute(
text(
"INSERT INTO invoices (invoice_number, vendor, invoice_date, "
"due_date, currency, subtotal, tax, total) "
"VALUES (:invoice_number, :vendor, :invoice_date, :due_date, "
":currency, :subtotal, :tax, :total) RETURNING id"
),
invoice.model_dump(exclude={"lines"}),
).scalar_one()
for line in invoice.lines:
conn.execute(
text(
"INSERT INTO invoice_lines (invoice_id, description, "
"quantity, unit_price, amount) "
"VALUES (:invoice_id, :description, :quantity, "
":unit_price, :amount)"
),
{"invoice_id": invoice_id, **line.model_dump()},
)