|
396 | 396 | {
|
397 | 397 | "data": {
|
398 | 398 | "text/plain": [
|
399 |
| - "<Database <sqlite3.Connection object at 0x12b38f790>>" |
| 399 | + "<Database <sqlite3.Connection object at 0x1373ab5b0>>" |
400 | 400 | ]
|
401 | 401 | },
|
402 | 402 | "execution_count": 18,
|
|
474 | 474 | },
|
475 | 475 | {
|
476 | 476 | "cell_type": "markdown",
|
477 |
| - "metadata": { |
478 |
| - "heading_collapsed": true |
479 |
| - }, |
| 477 | + "metadata": {}, |
480 | 478 | "source": [
|
481 | 479 | "## Database diagrams"
|
482 | 480 | ]
|
483 | 481 | },
|
484 | 482 | {
|
485 | 483 | "cell_type": "markdown",
|
486 |
| - "metadata": { |
487 |
| - "hidden": true |
488 |
| - }, |
| 484 | + "metadata": {}, |
489 | 485 | "source": [
|
490 | 486 | "(Requires graphviz.)"
|
491 | 487 | ]
|
492 | 488 | },
|
493 | 489 | {
|
494 | 490 | "cell_type": "code",
|
495 | 491 | "execution_count": 22,
|
496 |
| - "metadata": { |
497 |
| - "hidden": true |
498 |
| - }, |
| 492 | + "metadata": {}, |
499 | 493 | "outputs": [
|
500 | 494 | {
|
501 | 495 | "data": {
|
|
516 | 510 | {
|
517 | 511 | "cell_type": "code",
|
518 | 512 | "execution_count": 23,
|
519 |
| - "metadata": { |
520 |
| - "hidden": true |
521 |
| - }, |
| 513 | + "metadata": {}, |
522 | 514 | "outputs": [],
|
523 | 515 | "source": [
|
524 | 516 | "#| exports\n",
|
525 | 517 | "def _edge(tbl):\n",
|
526 | 518 | " return \"\\n\".join(f\"{fk.table}:{fk.column} -> {fk.other_table}:{fk.other_column};\"\n",
|
527 | 519 | " for fk in tbl.foreign_keys)\n",
|
528 | 520 | "\n",
|
529 |
| - "def _edges(tbls): return \"\\n\".join(map(_edge, tbls))\n", |
530 |
| - "\n", |
531 | 521 | "def _row(col):\n",
|
532 | 522 | " xtra = \" 🔑\" if col.is_pk else \"\"\n",
|
533 | 523 | " bg = ' bgcolor=\"#ffebcd\"' if col.is_pk else \"\"\n",
|
534 | 524 | " return f' <tr><td port=\"{col.name}\"{bg}>{col.name}{xtra}</td></tr>'\n",
|
535 | 525 | "\n",
|
536 | 526 | "def _tnode(tbl):\n",
|
537 | 527 | " rows = \"\\n\".join(_row(o) for o in tbl.columns)\n",
|
538 |
| - " bg = ' bgcolor=\"lightgray\"'\n", |
539 | 528 | " res = f\"\"\"<table cellborder=\"1\" cellspacing=\"0\">\n",
|
540 |
| - " <tr><td{bg}>{tbl.name}</td></tr>\n", |
| 529 | + " <tr><td bgcolor=\"lightgray\">{tbl.name}</td></tr>\n", |
541 | 530 | "{rows}\n",
|
542 | 531 | " </table>\"\"\"\n",
|
543 |
| - " return f\"{tbl.name} [label=<{res}>];\\n\"\n", |
544 |
| - "\n", |
545 |
| - "def _tnodes(tbls): return \"\\n\\n\".join(_tnode(o) for o in tbls)" |
| 532 | + " return f\"{tbl.name} [label=<{res}>];\\n\"" |
546 | 533 | ]
|
547 | 534 | },
|
548 | 535 | {
|
549 | 536 | "cell_type": "code",
|
550 |
| - "execution_count": 24, |
551 |
| - "metadata": { |
552 |
| - "hidden": true |
553 |
| - }, |
| 537 | + "execution_count": 26, |
| 538 | + "metadata": {}, |
554 | 539 | "outputs": [],
|
555 | 540 | "source": [
|
556 | 541 | "#| exports\n",
|
557 | 542 | "def diagram(tbls, ratio=0.7, size=\"10\", neato=False, render=True):\n",
|
558 | 543 | " layout = \"\\nlayout=neato;\\noverlap=prism;\\noverlap_scaling=0.5;\"\"\" if neato else \"\"\n",
|
559 |
| - "\n", |
| 544 | + " edges = \"\\n\".join(map(_edge, tbls))\n", |
| 545 | + " tnodes = \"\\n\".join(map(_tnode, tbls))\n", |
| 546 | + " \n", |
560 | 547 | " res = f\"\"\"digraph G {{\n",
|
561 | 548 | "rankdir=LR;{layout}\n",
|
562 | 549 | "size=\"{size}\";\n",
|
563 | 550 | "ratio={ratio};\n",
|
564 | 551 | "node [shape=plaintext]\n",
|
565 | 552 | "\n",
|
566 |
| - "{_tnodes(tbls)}\n", |
| 553 | + "{tnodes}\n", |
567 | 554 | "\n",
|
568 |
| - "{_edges(tbls)}\n", |
| 555 | + "{edges}\n", |
569 | 556 | "}}\n",
|
570 | 557 | "\"\"\"\n",
|
571 | 558 | " return Source(res) if render else res"
|
572 | 559 | ]
|
573 | 560 | },
|
574 | 561 | {
|
575 | 562 | "cell_type": "code",
|
576 |
| - "execution_count": 25, |
577 |
| - "metadata": { |
578 |
| - "hidden": true |
579 |
| - }, |
| 563 | + "execution_count": 27, |
| 564 | + "metadata": {}, |
580 | 565 | "outputs": [
|
581 | 566 | {
|
582 | 567 | "data": {
|
|
890 | 875 | "</svg>\n"
|
891 | 876 | ],
|
892 | 877 | "text/plain": [
|
893 |
| - "<graphviz.sources.Source at 0x12b4c64d0>" |
| 878 | + "<graphviz.sources.Source at 0x137485950>" |
894 | 879 | ]
|
895 | 880 | },
|
896 |
| - "execution_count": 25, |
| 881 | + "execution_count": 27, |
897 | 882 | "metadata": {},
|
898 | 883 | "output_type": "execute_result"
|
899 | 884 | }
|
|
0 commit comments