sqlalchemy-cratedb 0.36.0__tar.gz → 0.36.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/CHANGES.md +3 -0
- {sqlalchemy_cratedb-0.36.0/src/sqlalchemy_cratedb.egg-info → sqlalchemy_cratedb-0.36.1}/PKG-INFO +2 -2
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/pyproject.toml +1 -1
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1/src/sqlalchemy_cratedb.egg-info}/PKG-INFO +2 -2
- sqlalchemy_cratedb-0.36.1/src/sqlalchemy_cratedb.egg-info/SOURCES.txt +34 -0
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/src/sqlalchemy_cratedb.egg-info/requires.txt +1 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.build/_sources/advanced-querying.rst.txt +0 -335
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.build/_sources/backlog.md.txt +0 -12
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.build/_sources/by-example/index.rst.txt +0 -30
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.build/_sources/by-example/sqlalchemy/advanced-querying.rst.txt +0 -335
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.build/_sources/by-example/sqlalchemy/crud.rst.txt +0 -301
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.build/_sources/by-example/sqlalchemy/dataframe.rst.txt +0 -258
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.build/_sources/by-example/sqlalchemy/getting-started.rst.txt +0 -211
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.build/_sources/by-example/sqlalchemy/inspection-reflection.rst.txt +0 -126
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.build/_sources/by-example/sqlalchemy/working-with-types.rst.txt +0 -265
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.build/_sources/crud.rst.txt +0 -301
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.build/_sources/data-types.rst.txt +0 -85
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.build/_sources/dataframe.rst.txt +0 -258
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.build/_sources/getting-started.rst.txt +0 -211
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.build/_sources/index-all.rst.txt +0 -18
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.build/_sources/index.rst.txt +0 -215
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.build/_sources/inspection-reflection.rst.txt +0 -126
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.build/_sources/install.rst.txt +0 -52
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.build/_sources/overview.rst.txt +0 -719
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.build/_sources/sqlalchemy.rst.txt +0 -719
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.build/_sources/working-with-types.rst.txt +0 -265
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.build/_static/bundle/main.js.LICENSE.txt +0 -63
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.build/output.txt +0 -28
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/Babel-2.14.0.dist-info/entry_points.txt +0 -20
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/Babel-2.14.0.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/entry_points.txt +0 -2
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/Jinja2-3.1.2.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/MarkupSafe-2.1.3.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/PyYAML-6.0.1.dist-info/top_level.txt +0 -2
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/alabaster-0.7.13.dist-info/entry_points.txt +0 -3
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/alabaster-0.7.13.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/certifi-2023.11.17.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/charset_normalizer-3.3.2.dist-info/entry_points.txt +0 -2
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/charset_normalizer-3.3.2.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/colorama-0.4.6.dist-info/licenses/LICENSE.txt +0 -27
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/crate/theme/rtd/crate/static/bundle/main.js.LICENSE.txt +0 -63
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/crate_docs_theme-0.29.9.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/README.txt +0 -17
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isoamsa.txt +0 -162
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isoamsb.txt +0 -126
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isoamsc.txt +0 -29
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isoamsn.txt +0 -96
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isoamso.txt +0 -62
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isoamsr.txt +0 -191
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isobox.txt +0 -46
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isocyr1.txt +0 -73
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isocyr2.txt +0 -32
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isodia.txt +0 -20
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isogrk1.txt +0 -55
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isogrk2.txt +0 -26
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isogrk3.txt +0 -52
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isogrk4-wide.txt +0 -49
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isogrk4.txt +0 -8
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isolat1.txt +0 -68
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isolat2.txt +0 -128
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isomfrk-wide.txt +0 -58
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isomfrk.txt +0 -11
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isomopf-wide.txt +0 -32
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isomopf.txt +0 -13
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isomscr-wide.txt +0 -58
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isomscr.txt +0 -17
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isonum.txt +0 -82
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isopub.txt +0 -90
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/isotech.txt +0 -168
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/mmlalias.txt +0 -554
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/mmlextra-wide.txt +0 -113
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/mmlextra.txt +0 -87
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/s5defs.txt +0 -68
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/xhtml1-lat1.txt +0 -102
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/xhtml1-special.txt +0 -37
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/parsers/rst/include/xhtml1-symbol.txt +0 -130
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/writers/html4css1/template.txt +0 -8
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/writers/html5_polyglot/template.txt +0 -8
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/writers/pep_html/template.txt +0 -29
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils/writers/s5_html/themes/README.txt +0 -6
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils-0.16.dist-info/COPYING.txt +0 -137
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/docutils-0.16.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/imagesize-1.4.1.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/linkify_it_py-1.0.3.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/livereload-2.6.3.dist-info/entry_points.txt +0 -2
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/livereload-2.6.3.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/markdown_it_py-2.2.0.dist-info/entry_points.txt +0 -3
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/myst_parser-1.0.0.dist-info/entry_points.txt +0 -10
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/pip/_vendor/vendor.txt +0 -24
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/pip-23.3.2.dist-info/AUTHORS.txt +0 -753
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/pip-23.3.2.dist-info/LICENSE.txt +0 -20
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/pip-23.3.2.dist-info/entry_points.txt +0 -4
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/pip-23.3.2.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/pygments-2.17.2.dist-info/entry_points.txt +0 -2
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/requests-2.31.0.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/setuptools-68.2.2.dist-info/entry_points.txt +0 -56
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/setuptools-68.2.2.dist-info/top_level.txt +0 -3
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/six-1.16.0.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/snowballstemmer-2.2.0.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/sphinx-5.3.0.dist-info/entry_points.txt +0 -9
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/sphinx_autobuild-2021.3.14.dist-info/entry_points.txt +0 -3
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/sphinx_copybutton-0.5.2.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/sphinx_design/compiled/material-icons_VERSION.txt +0 -3
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/sphinx_design_elements-0.2.1.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/sphinx_sitemap-2.5.1.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/sphinx_togglebutton-0.3.2.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/sphinxcontrib_jsmath-1.0.1.dist-info/namespace_packages.txt +0 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/sphinxcontrib_jsmath-1.0.1.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/sphinxcontrib_mermaid-0.9.2.dist-info/namespace_packages.txt +0 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/sphinxcontrib_mermaid-0.9.2.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/sphinxcontrib_plantuml-0.27.dist-info/namespace_packages.txt +0 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/sphinxcontrib_plantuml-0.27.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/sphinxext_opengraph-0.9.1.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/tornado/test/static/robots.txt +0 -2
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/tornado/test/static_foo.txt +0 -2
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/tornado-6.4.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/uc_micro_py-1.0.2.dist-info/top_level.txt +0 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/urllib3-2.1.0.dist-info/licenses/LICENSE.txt +0 -21
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/wheel/vendored/vendor.txt +0 -1
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/wheel-0.42.0.dist-info/LICENSE.txt +0 -21
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.venv/lib/python3.11/site-packages/wheel-0.42.0.dist-info/entry_points.txt +0 -6
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/common-build/requirements.txt +0 -10
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/docs/_extra/robots.txt +0 -2
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/docs/requirements.txt +0 -2
- sqlalchemy_cratedb-0.36.0/docs/.crate-docs/helpers/preview/etc/requirements.txt +0 -3
- sqlalchemy_cratedb-0.36.0/docs/_extra/robots.txt +0 -4
- sqlalchemy_cratedb-0.36.0/src/sqlalchemy_cratedb.egg-info/SOURCES.txt +0 -154
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/CODE_OF_CONDUCT.md +0 -0
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/CONTRIBUTING.md +0 -0
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/DEVELOP.md +0 -0
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/LICENSE +0 -0
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/MANIFEST.in +0 -0
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/NOTICE +0 -0
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/README.md +0 -0
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/backlog.md +0 -0
- {sqlalchemy_cratedb-0.36.0/docs/.crate-docs/.build → sqlalchemy_cratedb-0.36.1/docs/_extra}/robots.txt +0 -0
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/docs/requirements.txt +0 -0
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/setup.cfg +0 -0
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/src/sqlalchemy_cratedb/__init__.py +0 -0
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/src/sqlalchemy_cratedb/compat/__init__.py +0 -0
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/src/sqlalchemy_cratedb/compat/api13.py +0 -0
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/src/sqlalchemy_cratedb/compat/core10.py +0 -0
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/src/sqlalchemy_cratedb/compat/core14.py +0 -0
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/src/sqlalchemy_cratedb/compat/core20.py +0 -0
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/src/sqlalchemy_cratedb/compiler.py +0 -0
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/src/sqlalchemy_cratedb/dialect.py +0 -0
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/src/sqlalchemy_cratedb/predicate.py +0 -0
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/src/sqlalchemy_cratedb/sa_version.py +0 -0
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/src/sqlalchemy_cratedb/support.py +0 -0
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/src/sqlalchemy_cratedb/type/__init__.py +0 -0
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/src/sqlalchemy_cratedb/type/array.py +0 -0
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/src/sqlalchemy_cratedb/type/geo.py +0 -0
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/src/sqlalchemy_cratedb/type/object.py +0 -0
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/src/sqlalchemy_cratedb.egg-info/dependency_links.txt +0 -0
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/src/sqlalchemy_cratedb.egg-info/entry_points.txt +0 -0
- {sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1}/src/sqlalchemy_cratedb.egg-info/top_level.txt +0 -0
{sqlalchemy_cratedb-0.36.0/src/sqlalchemy_cratedb.egg-info → sqlalchemy_cratedb-0.36.1}/PKG-INFO
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: sqlalchemy-cratedb
|
3
|
-
Version: 0.36.
|
3
|
+
Version: 0.36.1
|
4
4
|
Summary: SQLAlchemy dialect for CrateDB.
|
5
5
|
Author-email: "Crate.io" <office@crate.io>
|
6
6
|
License: Apache License 2.0
|
@@ -63,7 +63,7 @@ Description-Content-Type: text/markdown
|
|
63
63
|
License-File: LICENSE
|
64
64
|
License-File: NOTICE
|
65
65
|
Requires-Dist: backports.zoneinfo<1; python_version < "3.9"
|
66
|
-
Requires-Dist: crate
|
66
|
+
Requires-Dist: crate==1.0.0dev0
|
67
67
|
Requires-Dist: geojson<4,>=2.5
|
68
68
|
Requires-Dist: importlib-resources; python_version < "3.9"
|
69
69
|
Requires-Dist: sqlalchemy<2.1,>=1
|
{sqlalchemy_cratedb-0.36.0 → sqlalchemy_cratedb-0.36.1/src/sqlalchemy_cratedb.egg-info}/PKG-INFO
RENAMED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: sqlalchemy-cratedb
|
3
|
-
Version: 0.36.
|
3
|
+
Version: 0.36.1
|
4
4
|
Summary: SQLAlchemy dialect for CrateDB.
|
5
5
|
Author-email: "Crate.io" <office@crate.io>
|
6
6
|
License: Apache License 2.0
|
@@ -63,7 +63,7 @@ Description-Content-Type: text/markdown
|
|
63
63
|
License-File: LICENSE
|
64
64
|
License-File: NOTICE
|
65
65
|
Requires-Dist: backports.zoneinfo<1; python_version < "3.9"
|
66
|
-
Requires-Dist: crate
|
66
|
+
Requires-Dist: crate==1.0.0dev0
|
67
67
|
Requires-Dist: geojson<4,>=2.5
|
68
68
|
Requires-Dist: importlib-resources; python_version < "3.9"
|
69
69
|
Requires-Dist: sqlalchemy<2.1,>=1
|
@@ -0,0 +1,34 @@
|
|
1
|
+
CHANGES.md
|
2
|
+
CODE_OF_CONDUCT.md
|
3
|
+
CONTRIBUTING.md
|
4
|
+
DEVELOP.md
|
5
|
+
LICENSE
|
6
|
+
MANIFEST.in
|
7
|
+
NOTICE
|
8
|
+
README.md
|
9
|
+
backlog.md
|
10
|
+
pyproject.toml
|
11
|
+
setup.cfg
|
12
|
+
docs/requirements.txt
|
13
|
+
docs/_extra/robots.txt
|
14
|
+
src/sqlalchemy_cratedb/__init__.py
|
15
|
+
src/sqlalchemy_cratedb/compiler.py
|
16
|
+
src/sqlalchemy_cratedb/dialect.py
|
17
|
+
src/sqlalchemy_cratedb/predicate.py
|
18
|
+
src/sqlalchemy_cratedb/sa_version.py
|
19
|
+
src/sqlalchemy_cratedb/support.py
|
20
|
+
src/sqlalchemy_cratedb.egg-info/PKG-INFO
|
21
|
+
src/sqlalchemy_cratedb.egg-info/SOURCES.txt
|
22
|
+
src/sqlalchemy_cratedb.egg-info/dependency_links.txt
|
23
|
+
src/sqlalchemy_cratedb.egg-info/entry_points.txt
|
24
|
+
src/sqlalchemy_cratedb.egg-info/requires.txt
|
25
|
+
src/sqlalchemy_cratedb.egg-info/top_level.txt
|
26
|
+
src/sqlalchemy_cratedb/compat/__init__.py
|
27
|
+
src/sqlalchemy_cratedb/compat/api13.py
|
28
|
+
src/sqlalchemy_cratedb/compat/core10.py
|
29
|
+
src/sqlalchemy_cratedb/compat/core14.py
|
30
|
+
src/sqlalchemy_cratedb/compat/core20.py
|
31
|
+
src/sqlalchemy_cratedb/type/__init__.py
|
32
|
+
src/sqlalchemy_cratedb/type/array.py
|
33
|
+
src/sqlalchemy_cratedb/type/geo.py
|
34
|
+
src/sqlalchemy_cratedb/type/object.py
|
@@ -1,335 +0,0 @@
|
|
1
|
-
.. _advanced-querying:
|
2
|
-
|
3
|
-
=================
|
4
|
-
Advanced querying
|
5
|
-
=================
|
6
|
-
|
7
|
-
This section of the documentation demonstrates running queries using a fulltext
|
8
|
-
index with an analyzer, queries using counting and aggregations, and support for
|
9
|
-
the ``INSERT...FROM SELECT`` and ``INSERT...RETURNING`` constructs, all using the
|
10
|
-
CrateDB SQLAlchemy dialect.
|
11
|
-
|
12
|
-
|
13
|
-
.. rubric:: Table of Contents
|
14
|
-
|
15
|
-
.. contents::
|
16
|
-
:local:
|
17
|
-
|
18
|
-
|
19
|
-
Introduction
|
20
|
-
============
|
21
|
-
|
22
|
-
Import the relevant symbols:
|
23
|
-
|
24
|
-
>>> import sqlalchemy as sa
|
25
|
-
>>> from sqlalchemy.orm import sessionmaker
|
26
|
-
>>> try:
|
27
|
-
... from sqlalchemy.orm import declarative_base
|
28
|
-
... except ImportError:
|
29
|
-
... from sqlalchemy.ext.declarative import declarative_base
|
30
|
-
>>> from uuid import uuid4
|
31
|
-
|
32
|
-
Establish a connection to the database, see also :ref:`sa:engines_toplevel`
|
33
|
-
and :ref:`connect`:
|
34
|
-
|
35
|
-
>>> engine = sa.create_engine(f"crate://{crate_host}")
|
36
|
-
>>> connection = engine.connect()
|
37
|
-
|
38
|
-
Create an SQLAlchemy :doc:`Session <sa:orm/session_basics>`:
|
39
|
-
|
40
|
-
>>> session = sessionmaker(bind=engine)()
|
41
|
-
>>> Base = declarative_base()
|
42
|
-
|
43
|
-
|
44
|
-
Introduction to fulltext indexes
|
45
|
-
================================
|
46
|
-
|
47
|
-
:ref:`crate-reference:fulltext-indices` take the contents of one or more fields
|
48
|
-
and split it up into tokens that are used for fulltext-search. The
|
49
|
-
transformation from a text to separate tokens is done by an analyzer. In order
|
50
|
-
to conduct fulltext search queries, we need to create a table with a
|
51
|
-
:ref:`fulltext index with an analyzer <crate-reference:sql_ddl_index_fulltext>`.
|
52
|
-
|
53
|
-
.. code-block:: sql
|
54
|
-
|
55
|
-
CREATE TABLE characters (
|
56
|
-
id STRING PRIMARY KEY,
|
57
|
-
name STRING,
|
58
|
-
quote STRING,
|
59
|
-
INDEX name_ft USING fulltext(name) WITH (analyzer = 'english'),
|
60
|
-
INDEX quote_ft USING fulltext(quote) WITH (analyzer = 'english')
|
61
|
-
)
|
62
|
-
|
63
|
-
We have to create this table using SQL because it is currently not possible to
|
64
|
-
create ``INDEX`` fields using SQLAlchemy's :ref:`sa:orm_declarative_mapping`.
|
65
|
-
However, we can define the table to use all other operations:
|
66
|
-
|
67
|
-
>>> def gen_key():
|
68
|
-
... return str(uuid4())
|
69
|
-
|
70
|
-
>>> class Character(Base):
|
71
|
-
... __tablename__ = 'characters'
|
72
|
-
... id = sa.Column(sa.String, primary_key=True, default=gen_key)
|
73
|
-
... name = sa.Column(sa.String)
|
74
|
-
... quote = sa.Column(sa.String)
|
75
|
-
... name_ft = sa.Column(sa.String)
|
76
|
-
... quote_ft = sa.Column(sa.String)
|
77
|
-
... __mapper_args__ = {
|
78
|
-
... 'exclude_properties': ['name_ft', 'quote_ft']
|
79
|
-
... }
|
80
|
-
|
81
|
-
We define ``name_ft`` and ``quote_ft`` as regular columns, but add them under
|
82
|
-
``__mapper_args__.exclude_properties`` to ensure they're excluded from insert
|
83
|
-
or update operations.
|
84
|
-
|
85
|
-
In order to support fulltext query operations, the CrateDB SQLAlchemy dialect
|
86
|
-
provides the :ref:`crate-reference:predicates_match` through its ``match``
|
87
|
-
function.
|
88
|
-
|
89
|
-
Let's add two records we use for testing.
|
90
|
-
|
91
|
-
>>> arthur = Character(name='Arthur Dent')
|
92
|
-
>>> arthur.quote = "Let's go somewhere."
|
93
|
-
>>> session.add(arthur)
|
94
|
-
|
95
|
-
>>> trillian = Character(name='Tricia McMillan')
|
96
|
-
>>> trillian.quote = "We're on a space ship Arthur. In space."
|
97
|
-
>>> session.add(trillian)
|
98
|
-
|
99
|
-
>>> session.commit()
|
100
|
-
|
101
|
-
After ``INSERT`` statements are submitted to the database, the newly inserted
|
102
|
-
records aren't immediately available for retrieval, because the index is only
|
103
|
-
updated periodically (default: each second). In order to synchronize that,
|
104
|
-
explicitly refresh the table:
|
105
|
-
|
106
|
-
>>> _ = connection.execute(sa.text("REFRESH TABLE characters"))
|
107
|
-
|
108
|
-
|
109
|
-
Fulltext search with MATCH predicate
|
110
|
-
====================================
|
111
|
-
|
112
|
-
Fulltext search in CrateDB is performed using :ref:`crate-reference:predicates_match`.
|
113
|
-
The CrateDB SQLAlchemy dialect comes with a ``match`` function, which can be used to
|
114
|
-
search on one or multiple fields.
|
115
|
-
|
116
|
-
>>> from crate.client.sqlalchemy.predicates import match
|
117
|
-
|
118
|
-
>>> session.query(Character.name) \
|
119
|
-
... .filter(match(Character.name_ft, 'Arthur')) \
|
120
|
-
... .all()
|
121
|
-
[('Arthur Dent',)]
|
122
|
-
|
123
|
-
To get the relevance of a matching row, you can select the ``_score`` system
|
124
|
-
column. It is a numeric value which is relative to the other rows.
|
125
|
-
The higher the score value, the more relevant the row.
|
126
|
-
|
127
|
-
In most cases, ``_score`` is not part of the SQLAlchemy table definition,
|
128
|
-
so it must be passed as a verbatim string, using ``literal_column``:
|
129
|
-
|
130
|
-
>>> session.query(Character.name, sa.literal_column('_score')) \
|
131
|
-
... .filter(match(Character.quote_ft, 'space')) \
|
132
|
-
... .all()
|
133
|
-
[('Tricia McMillan', ...)]
|
134
|
-
|
135
|
-
To search multiple columns, use a dictionary where the keys are the columns and
|
136
|
-
the values are a ``boost``. A ``boost`` is a factor that increases the relevance
|
137
|
-
of a column in respect to the other columns:
|
138
|
-
|
139
|
-
>>> session.query(Character.name) \
|
140
|
-
... .filter(match({Character.name_ft: 1.5, Character.quote_ft: 0.1},
|
141
|
-
... 'Arthur')) \
|
142
|
-
... .order_by(sa.desc(sa.literal_column('_score'))) \
|
143
|
-
... .all()
|
144
|
-
[('Arthur Dent',), ('Tricia McMillan',)]
|
145
|
-
|
146
|
-
The ``match_type`` argument determines how a single ``query_term`` is applied,
|
147
|
-
and how the resulting ``_score`` is computed. Thus, it influences which
|
148
|
-
documents are considered more relevant. The default selection is ``best_fields``.
|
149
|
-
For more information, see :ref:`crate-reference:predicates_match_types`.
|
150
|
-
|
151
|
-
If you want to sort the results by ``_score``, you can use the ``order_by()``
|
152
|
-
function.
|
153
|
-
|
154
|
-
>>> session.query(Character.name) \
|
155
|
-
... .filter(
|
156
|
-
... match(Character.name_ft, 'Arth',
|
157
|
-
... match_type='phrase',
|
158
|
-
... options={'fuzziness': 3})
|
159
|
-
... ) \
|
160
|
-
... .all()
|
161
|
-
[('Arthur Dent',)]
|
162
|
-
|
163
|
-
It is not possible to specify options without the ``match_type`` argument:
|
164
|
-
|
165
|
-
>>> session.query(Character.name) \
|
166
|
-
... .filter(
|
167
|
-
... match(Character.name_ft, 'Arth',
|
168
|
-
... options={'fuzziness': 3})
|
169
|
-
... ) \
|
170
|
-
... .all()
|
171
|
-
Traceback (most recent call last):
|
172
|
-
ValueError: missing match_type. It's not allowed to specify options without match_type
|
173
|
-
|
174
|
-
|
175
|
-
Aggregates: Counting and grouping
|
176
|
-
=================================
|
177
|
-
|
178
|
-
SQLAlchemy supports different approaches to issue a query with a count
|
179
|
-
aggregate function. Take a look at the `count result rows`_ documentation
|
180
|
-
for a full overview.
|
181
|
-
|
182
|
-
CrateDB currently does not support all variants as it can not handle the
|
183
|
-
sub-queries yet.
|
184
|
-
|
185
|
-
This means that queries using ``count()`` have to be written in one of the
|
186
|
-
following ways:
|
187
|
-
|
188
|
-
>>> session.query(sa.func.count(Character.id)).scalar()
|
189
|
-
2
|
190
|
-
|
191
|
-
>>> session.query(sa.func.count('*')).select_from(Character).scalar()
|
192
|
-
2
|
193
|
-
|
194
|
-
Using the ``group_by`` clause is similar:
|
195
|
-
|
196
|
-
>>> session.query(sa.func.count(Character.id), Character.name) \
|
197
|
-
... .group_by(Character.name) \
|
198
|
-
... .order_by(sa.desc(sa.func.count(Character.id))) \
|
199
|
-
... .order_by(Character.name).all()
|
200
|
-
[(1, 'Arthur Dent'), (1, 'Tricia McMillan')]
|
201
|
-
|
202
|
-
|
203
|
-
``INSERT...FROM SELECT``
|
204
|
-
========================
|
205
|
-
|
206
|
-
In SQLAlchemy, the ``insert().from_select()`` function returns a new ``Insert``
|
207
|
-
construct, which represents an ``INSERT...FROM SELECT`` statement. This
|
208
|
-
functionality is supported by the CrateDB client library. Here is an example
|
209
|
-
that uses ``insert().from_select()``.
|
210
|
-
|
211
|
-
First, let's define and create the tables:
|
212
|
-
|
213
|
-
>>> from sqlalchemy import select, insert
|
214
|
-
|
215
|
-
>>> class Todos(Base):
|
216
|
-
... __tablename__ = 'todos'
|
217
|
-
... __table_args__ = {
|
218
|
-
... 'crate_number_of_replicas': '0'
|
219
|
-
... }
|
220
|
-
... id = sa.Column(sa.String, primary_key=True, default=gen_key)
|
221
|
-
... content = sa.Column(sa.String)
|
222
|
-
... status = sa.Column(sa.String)
|
223
|
-
|
224
|
-
>>> class ArchivedTasks(Base):
|
225
|
-
... __tablename__ = 'archived_tasks'
|
226
|
-
... __table_args__ = {
|
227
|
-
... 'crate_number_of_replicas': '0'
|
228
|
-
... }
|
229
|
-
... id = sa.Column(sa.String, primary_key=True)
|
230
|
-
... content = sa.Column(sa.String)
|
231
|
-
|
232
|
-
>>> Base.metadata.create_all(bind=engine)
|
233
|
-
|
234
|
-
Let's add a task to the ``Todo`` table:
|
235
|
-
|
236
|
-
>>> task = Todos(content='Write Tests', status='done')
|
237
|
-
>>> session.add(task)
|
238
|
-
>>> session.commit()
|
239
|
-
>>> _ = connection.execute(sa.text("REFRESH TABLE todos"))
|
240
|
-
|
241
|
-
Now, let's use ``insert().from_select()`` to archive the task into the
|
242
|
-
``ArchivedTasks`` table:
|
243
|
-
|
244
|
-
>>> sel = select(Todos.id, Todos.content).where(Todos.status == "done")
|
245
|
-
>>> ins = insert(ArchivedTasks).from_select(['id', 'content'], sel)
|
246
|
-
>>> result = session.execute(ins)
|
247
|
-
>>> session.commit()
|
248
|
-
|
249
|
-
This will emit the following ``INSERT`` statement to the database:
|
250
|
-
|
251
|
-
INSERT INTO archived_tasks (id, content)
|
252
|
-
(SELECT todos.id, todos.content FROM todos WHERE todos.status = 'done')
|
253
|
-
|
254
|
-
Now, verify that the data is present in the database:
|
255
|
-
|
256
|
-
>>> _ = connection.execute(sa.text("REFRESH TABLE archived_tasks"))
|
257
|
-
>>> pprint([str(r) for r in session.execute(sa.text("SELECT content FROM archived_tasks"))])
|
258
|
-
["('Write Tests',)"]
|
259
|
-
|
260
|
-
|
261
|
-
``INSERT...RETURNING``
|
262
|
-
======================
|
263
|
-
|
264
|
-
The ``RETURNING`` clause can be used to retrieve the result rows of an ``INSERT``
|
265
|
-
operation. It may be specified using the ``Insert.returning()`` method.
|
266
|
-
|
267
|
-
The first step is to define the table:
|
268
|
-
|
269
|
-
>>> from sqlalchemy import insert
|
270
|
-
|
271
|
-
>>> class User(Base):
|
272
|
-
... __tablename__ = 'user'
|
273
|
-
... __table_args__ = {
|
274
|
-
... 'crate_number_of_replicas': '0'
|
275
|
-
... }
|
276
|
-
... id = sa.Column(sa.String, primary_key=True, default=gen_key)
|
277
|
-
... username = sa.Column(sa.String)
|
278
|
-
... email = sa.Column(sa.String)
|
279
|
-
|
280
|
-
>>> Base.metadata.create_all(bind=engine)
|
281
|
-
|
282
|
-
Now, let's use the returning clause on our insert to retrieve the values inserted:
|
283
|
-
|
284
|
-
>>> stmt = insert(User).values(username='Crate', email='crate@crate.io').returning(User.username, User.email)
|
285
|
-
>>> result = session.execute(stmt)
|
286
|
-
>>> session.commit()
|
287
|
-
>>> print([str(r) for r in result])
|
288
|
-
["('Crate', 'crate@crate.io')"]
|
289
|
-
|
290
|
-
The following ``INSERT...RETURNING`` statement was issued to the database::
|
291
|
-
|
292
|
-
INSERT INTO user (id, username, email)
|
293
|
-
VALUES (:id, :username, :email)
|
294
|
-
RETURNING user.id, user.username, user.email
|
295
|
-
|
296
|
-
``UPDATE...RETURNING``
|
297
|
-
|
298
|
-
The ``RETURNING`` clause can also be used with an ``UPDATE`` operation to return
|
299
|
-
specified rows to be returned on execution. It can be specified using the
|
300
|
-
``Update.returning()`` method.
|
301
|
-
|
302
|
-
|
303
|
-
We can reuse the user table previously created in the ``INSERT...RETURNING`` section.
|
304
|
-
|
305
|
-
Insert a user and get the user id:
|
306
|
-
|
307
|
-
>>> from sqlalchemy import insert, update
|
308
|
-
|
309
|
-
>>> stmt = insert(User).values(username='Arthur Dent', email='arthur_dent@crate.io').returning(User.id, User.username, User.email)
|
310
|
-
>>> result = session.execute(stmt)
|
311
|
-
>>> session.commit()
|
312
|
-
>>> uid = [r[0] for r in result][0]
|
313
|
-
|
314
|
-
Now let's update the user:
|
315
|
-
|
316
|
-
>>> stmt = update(User).where(User.id == uid).values(username='Tricia McMillan', email='tricia_mcmillan@crate.io').returning(User.username, User.email)
|
317
|
-
>>> res = session.execute(stmt)
|
318
|
-
>>> session.commit()
|
319
|
-
>>> print([str(r) for r in res])
|
320
|
-
["('Tricia McMillan', 'tricia_mcmillan@crate.io')"]
|
321
|
-
|
322
|
-
The following ``UPDATE...RETURNING`` statement was issued to the database::
|
323
|
-
|
324
|
-
UPDATE user SET username=:username, email=:email
|
325
|
-
WHERE user.id = :id_1
|
326
|
-
RETURNING user.username, user.email
|
327
|
-
|
328
|
-
.. hidden: Disconnect from database
|
329
|
-
|
330
|
-
>>> session.close()
|
331
|
-
>>> connection.close()
|
332
|
-
>>> engine.dispose()
|
333
|
-
|
334
|
-
|
335
|
-
.. _count result rows: https://docs.sqlalchemy.org/en/14/orm/tutorial.html#counting
|
@@ -1,12 +0,0 @@
|
|
1
|
-
# Backlog
|
2
|
-
|
3
|
-
## Iteration +1
|
4
|
-
From dialect split-off.
|
5
|
-
- Re-enable parameterized test cases.
|
6
|
-
```
|
7
|
-
tests.addTest(ParametrizedTestCase.parametrize(SqlAlchemyCompilerTest, param={"server_version_info": None}))
|
8
|
-
tests.addTest(ParametrizedTestCase.parametrize(SqlAlchemyCompilerTest, param={"server_version_info": (4, 0, 12)}))
|
9
|
-
tests.addTest(ParametrizedTestCase.parametrize(SqlAlchemyCompilerTest, param={"server_version_info": (4, 1, 10)}))
|
10
|
-
```
|
11
|
-
- Re-enable doctests.
|
12
|
-
|
@@ -1,30 +0,0 @@
|
|
1
|
-
.. _by-example:
|
2
|
-
|
3
|
-
##########
|
4
|
-
By example
|
5
|
-
##########
|
6
|
-
|
7
|
-
This part of the documentation enumerates different kinds of examples how to
|
8
|
-
use the CrateDB Python client.
|
9
|
-
|
10
|
-
.. _sqlalchemy-by-example:
|
11
|
-
|
12
|
-
SQLAlchemy by example
|
13
|
-
=====================
|
14
|
-
|
15
|
-
The examples in this section are all about CrateDB's `SQLAlchemy`_ dialect, and
|
16
|
-
its corresponding API interfaces, see also :ref:`sqlalchemy-support`.
|
17
|
-
|
18
|
-
.. toctree::
|
19
|
-
:maxdepth: 1
|
20
|
-
|
21
|
-
sqlalchemy/getting-started
|
22
|
-
sqlalchemy/crud
|
23
|
-
sqlalchemy/working-with-types
|
24
|
-
sqlalchemy/advanced-querying
|
25
|
-
sqlalchemy/inspection-reflection
|
26
|
-
sqlalchemy/dataframe
|
27
|
-
|
28
|
-
|
29
|
-
.. _Python DB API: https://peps.python.org/pep-0249/
|
30
|
-
.. _SQLAlchemy: https://www.sqlalchemy.org/
|