Lesson 2 — Customers, dated invoices, amounts and relationship paths

All people, products and invoices are fictional teaching data.
Unzip this bundle. Put its four CSV files in the Python console's current
working folder, then type console.py in order in the SAME console as lesson 1.
If Python was closed, first run from the extracted folder:
    exec(open("start-here.py").read())
The bootstrap recreates exactly the lesson-one state: three products in memory.
The CSV files are inputs; no model or database files are created.
Do not repeat imports in a populated session: the keys are intentionally unique.

Files and results:
- products.csv: 27 NEW products; TEA, COF and MUG already exist from lesson 1.
  After import the catalogue has 30 products.
- customers.csv: 8 customers, with city.
- invoices.csv: 12 invoices; invoice_date uses ISO YYYY-MM-DD format.
- invoice_rows.csv: 36 rows with quantity and unit_price, stored as decimal text.
  total is deliberately omitted: the import calculates quantity * unit_price
  with Decimal and rounds to two decimal places. All amounts use one assumed
  currency; this introductory example excludes tax, discounts and conversions.

Import order: products, customers, invoices, invoice rows.
Convert integer keys/quantities, parse date.fromisoformat, and construct Decimal
DIRECTLY from the price string. Commit each complete file import.
unit_price is saved on the invoice row. total is an ordinary stored numeric
column, calculated here during import. Recalculate total whenever changing a
row's quantity or unit_price; it is not an automatic formula column.
These are deliberately small, valid fixtures, not a general CSV importer.

Paths:
    @customer_id.city
    @product_code.name
    @invoice_id.@customer_id.city
    @invoice_id.invoice_date
SQL foreign keys reject missing products. Relation paths compile to joins.

Uses the same API as lesson 1. Official release installation verification is
still pending; see /status/#course before using the current PyPI package.
The video reconstructs verified commands/results with edited timing.
