{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "96ba3639",
   "metadata": {},
   "source": [
    "#22-23 · Połączenie z SQLite przez sqlite3\n",
    "\n",
    "Praktyka do sekcji [„SQLite: wbudowany relacyjny DBMS”"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "eb34a534",
   "metadata": {},
   "source": [
    "## Cel\n",
    "\n",
    "Używaj row_factory, aby odwoływać się do kolumn po nazwie i upewnij się, że sqlite3.Row zachowuje się zgodnie z łańcuch znaków wynikiem."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f3411dc1",
   "metadata": {},
   "source": [
    "## Sprawa robocza"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "e899ba0b",
   "metadata": {},
   "outputs": [],
   "source": [
    "import sqlite3\n",
    "\n",
    "baza = sqlite3.connect(\":memory:\")\n",
    "baza.row_factory = sqlite3.Row\n",
    "baza.execute(\"CREATE TABLE tasks (id INTEGER PRIMARY KEY, title TEXT NOT NULL, done INTEGER NOT NULL DEFAULT 0)\")\n",
    "baza.execute(\"INSERT INTO tasks (title, done) VALUES (?, ?)\", (\"Полить цветы\", 1))\n",
    "baza.commit()\n",
    "\n",
    "stroka = baza.execute(\"SELECT id, title, done FROM tasks\").fetchone()\n",
    "print(\"По имени:\", stroka[\"title\"], stroka[\"done\"])\n",
    "print(\"По индексу:\", stroka[0], stroka[1])"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3907705a",
   "metadata": {},
   "source": [
    "## Sprawdzenie wyniku"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f2556042",
   "metadata": {},
   "outputs": [],
   "source": [
    "assert stroka[\"title\"] == \"Полить цветы\"\n",
    "assert stroka[\"done\"] == 1\n",
    "assert stroka[1] == stroka[\"title\"]\n",
    "print(\"Верно: sqlite3.Row доступен и по имени столбца, и по числовому индексу.\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Cartesian Python 3.14",
   "language": "python",
   "name": "cartesian-python314"
  },
  "language_info": {
   "name": "python",
   "version": "3.14.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
