|
20 | 20 | "outputs": [],
|
21 | 21 | "source": [
|
22 | 22 | "import pandas as pd\n",
|
23 |
| - "from distutils.version import LooseVersion\n", |
24 | 23 | "from pangres import upsert\n",
|
25 | 24 | "from sqlalchemy import create_engine, inspect as sqla_inspect, text\n",
|
26 | 25 | "from typing import Optional\n",
|
|
39 | 38 | "# Helpers"
|
40 | 39 | ]
|
41 | 40 | },
|
| 41 | + { |
| 42 | + "cell_type": "markdown", |
| 43 | + "id": "32d537c1-3a4d-4e0d-a467-43be15c91773", |
| 44 | + "metadata": {}, |
| 45 | + "source": [ |
| 46 | + "## Generic" |
| 47 | + ] |
| 48 | + }, |
| 49 | + { |
| 50 | + "cell_type": "code", |
| 51 | + "execution_count": 2, |
| 52 | + "id": "46fcfb29-6ef0-4a25-8af8-969ce9c0582c", |
| 53 | + "metadata": {}, |
| 54 | + "outputs": [], |
| 55 | + "source": [ |
| 56 | + "def version_equal_or_greater_than(version_string, minimal_version_string) -> bool:\n", |
| 57 | + " # different implementations of this function depending on the python version\n", |
| 58 | + " # check if Python >= 3.10\n", |
| 59 | + " import sys\n", |
| 60 | + " py_v = sys.version_info\n", |
| 61 | + " py_gt3_10 = (py_v.major > 3) or ((py_v.major >= 3) and (py_v.minor >= 10))\n", |
| 62 | + "\n", |
| 63 | + " # for Python >= 3.10 use packaging.version otherwise use distutils.version.LooseVersion\n", |
| 64 | + " if py_gt3_10:\n", |
| 65 | + " from packaging import version\n", |
| 66 | + " return version.parse(version_string) >= version.parse(minimal_version_string)\n", |
| 67 | + " else:\n", |
| 68 | + " from distutils.version import LooseVersion\n", |
| 69 | + " return LooseVersion(version_string) >= LooseVersion(minimal_version_string)" |
| 70 | + ] |
| 71 | + }, |
42 | 72 | {
|
43 | 73 | "cell_type": "markdown",
|
44 | 74 | "id": "832b8ab1-1356-4e7f-bd5a-cfdfe4087cbe",
|
|
49 | 79 | },
|
50 | 80 | {
|
51 | 81 | "cell_type": "code",
|
52 |
| - "execution_count": 2, |
| 82 | + "execution_count": 3, |
53 | 83 | "id": "normal-material",
|
54 | 84 | "metadata": {},
|
55 | 85 | "outputs": [],
|
56 | 86 | "source": [
|
57 | 87 | "def table_exists(connection, table_name, schema=None) -> bool:\n",
|
58 | 88 | " insp = sqla_inspect(connection)\n",
|
59 | 89 | " import sqlalchemy\n",
|
60 |
| - " if LooseVersion(sqlalchemy.__version__) >= LooseVersion(\"1.4.0\"):\n", |
| 90 | + " if version_equal_or_greater_than(sqlalchemy.__version__, '1.4.0'):\n", |
61 | 91 | " return insp.has_table(table_name=table_name, schema=schema)\n",
|
62 | 92 | " else:\n",
|
63 | 93 | " return table_name in insp.get_table_names(schema=schema)\n",
|
|
97 | 127 | },
|
98 | 128 | {
|
99 | 129 | "cell_type": "code",
|
100 |
| - "execution_count": 3, |
| 130 | + "execution_count": 4, |
101 | 131 | "id": "d8a3f3d2-fa54-41d4-a070-25c34b760db1",
|
102 | 132 | "metadata": {},
|
103 | 133 | "outputs": [],
|
|
149 | 179 | },
|
150 | 180 | {
|
151 | 181 | "cell_type": "code",
|
152 |
| - "execution_count": 4, |
| 182 | + "execution_count": 5, |
153 | 183 | "id": "strategic-sugar",
|
154 | 184 | "metadata": {},
|
155 | 185 | "outputs": [],
|
|
205 | 235 | },
|
206 | 236 | {
|
207 | 237 | "cell_type": "code",
|
208 |
| - "execution_count": 5, |
| 238 | + "execution_count": 6, |
209 | 239 | "id": "seventh-reference",
|
210 | 240 | "metadata": {},
|
211 | 241 | "outputs": [
|
|
300 | 330 | },
|
301 | 331 | {
|
302 | 332 | "cell_type": "code",
|
303 |
| - "execution_count": 6, |
| 333 | + "execution_count": 7, |
304 | 334 | "id": "spiritual-spider",
|
305 | 335 | "metadata": {},
|
306 | 336 | "outputs": [
|
|
386 | 416 | },
|
387 | 417 | {
|
388 | 418 | "cell_type": "code",
|
389 |
| - "execution_count": 7, |
| 419 | + "execution_count": 8, |
390 | 420 | "id": "617a1ec1-b39c-45dd-903d-4520f6de71ec",
|
391 | 421 | "metadata": {},
|
392 | 422 | "outputs": [
|
|
484 | 514 | },
|
485 | 515 | {
|
486 | 516 | "cell_type": "code",
|
487 |
| - "execution_count": 8, |
| 517 | + "execution_count": 9, |
488 | 518 | "id": "204330eb-ce97-4fb4-8176-5fac3241ef0e",
|
489 | 519 | "metadata": {},
|
490 | 520 | "outputs": [
|
|
601 | 631 | },
|
602 | 632 | {
|
603 | 633 | "cell_type": "code",
|
604 |
| - "execution_count": 9, |
| 634 | + "execution_count": 10, |
605 | 635 | "id": "5e43fe2a-41f2-44b5-92ec-2d6828dbf08f",
|
606 | 636 | "metadata": {},
|
607 | 637 | "outputs": [],
|
|
611 | 641 | },
|
612 | 642 | {
|
613 | 643 | "cell_type": "code",
|
614 |
| - "execution_count": 10, |
| 644 | + "execution_count": 11, |
615 | 645 | "id": "55e4b5b6-af9c-4ba8-bc37-27ed9ec4a3c3",
|
616 | 646 | "metadata": {},
|
617 | 647 | "outputs": [
|
|
662 | 692 | },
|
663 | 693 | {
|
664 | 694 | "cell_type": "code",
|
665 |
| - "execution_count": 11, |
| 695 | + "execution_count": 12, |
666 | 696 | "id": "88ecb1b5-7960-4d60-8e7f-3c5cd3774005",
|
667 | 697 | "metadata": {},
|
668 | 698 | "outputs": [],
|
|
672 | 702 | },
|
673 | 703 | {
|
674 | 704 | "cell_type": "code",
|
675 |
| - "execution_count": 12, |
| 705 | + "execution_count": 13, |
676 | 706 | "id": "b0eeb2dd-7ab8-4f91-ae8b-91abe324a8f8",
|
677 | 707 | "metadata": {},
|
678 | 708 | "outputs": [
|
|
760 | 790 | ],
|
761 | 791 | "metadata": {
|
762 | 792 | "kernelspec": {
|
763 |
| - "display_name": "Python [conda env:pangres-dev]", |
| 793 | + "display_name": "Python 3 (ipykernel)", |
764 | 794 | "language": "python",
|
765 |
| - "name": "conda-env-pangres-dev-py" |
| 795 | + "name": "python3" |
766 | 796 | },
|
767 | 797 | "language_info": {
|
768 | 798 | "codemirror_mode": {
|
|
774 | 804 | "name": "python",
|
775 | 805 | "nbconvert_exporter": "python",
|
776 | 806 | "pygments_lexer": "ipython3",
|
777 |
| - "version": "3.9.7" |
| 807 | + "version": "3.10.1" |
778 | 808 | }
|
779 | 809 | },
|
780 | 810 | "nbformat": 4,
|
|
0 commit comments