From 8325f855afa20e5c7a728478530cac31ab923f14 Mon Sep 17 00:00:00 2001 From: Friedrich Lindenberg Date: Wed, 30 Dec 2020 22:16:10 +0100 Subject: [PATCH] Revamp the documentation --- .bumpversion.cfg | 2 + dataset/table.py | 14 +- docs/_static/dataset-logo-dark.png | Bin 0 -> 45255 bytes docs/_static/dataset-logo-light.png | Bin 0 -> 45276 bytes docs/_themes/LICENSE | 45 --- docs/_themes/README.md | 25 -- docs/_themes/flask_theme_support.py | 89 ----- docs/_themes/kr/autotoc.html | 25 -- docs/_themes/kr/layout.html | 29 -- docs/_themes/kr/relations.html | 19 - docs/_themes/kr/sidebarlogo.html | 15 - docs/_themes/kr/static/flasky.css_t | 559 ---------------------------- docs/_themes/kr/theme.conf | 7 - docs/api.rst | 4 - docs/conf.py | 172 +-------- docs/index.rst | 1 + docs/queries.rst | 53 +++ docs/quickstart.rst | 40 +- docs/requirements.txt | 2 +- 19 files changed, 104 insertions(+), 997 deletions(-) create mode 100644 docs/_static/dataset-logo-dark.png create mode 100644 docs/_static/dataset-logo-light.png delete mode 100755 docs/_themes/LICENSE delete mode 100755 docs/_themes/README.md delete mode 100755 docs/_themes/flask_theme_support.py delete mode 100644 docs/_themes/kr/autotoc.html delete mode 100755 docs/_themes/kr/layout.html delete mode 100755 docs/_themes/kr/relations.html delete mode 100644 docs/_themes/kr/sidebarlogo.html delete mode 100755 docs/_themes/kr/static/flasky.css_t delete mode 100755 docs/_themes/kr/theme.conf create mode 100644 docs/queries.rst diff --git a/.bumpversion.cfg b/.bumpversion.cfg index cd7c049..560b4b5 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -9,3 +9,5 @@ search = version="{current_version}" replace = version="{new_version}" [bumpversion:file:dataset/__init__.py] + +[bumpversion:file:docs/conf.py] diff --git a/dataset/table.py b/dataset/table.py index f3f8e3d..9e1aab0 100644 --- a/dataset/table.py +++ b/dataset/table.py @@ -486,9 +486,12 @@ class Table(object): self.create_column(name, type_) def drop_column(self, name): - """Drop the column ``name``. + """ + Drop the column ``name``. :: + table.drop_column('created_at') + """ if self.db.engine.dialect.name == "sqlite": raise RuntimeError("SQLite does not support dropping columns.") @@ -589,9 +592,12 @@ class Table(object): # return all rows sorted by multiple columns (descending by year) results = table.find(order_by=['country', '-year']) - To perform complex queries with advanced filters or to perform - aggregation, use :py:meth:`db.query() ` - instead. + You can also submit filters based on criteria other than equality, + see :ref:`advanced_filters` for details. + + To run more complex queries with JOINs, or to perform GROUP BY-style + aggregation, you can also use :py:meth:`db.query() ` + to run raw SQL queries instead. """ if not self.exists: return iter([]) diff --git a/docs/_static/dataset-logo-dark.png b/docs/_static/dataset-logo-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..8a5a2722a3d7d9cd486e8949f4ad05c567de1f75 GIT binary patch literal 45255 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

s1bKtO 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 literal 0 HcmV?d00001 diff --git a/docs/_static/dataset-logo-light.png b/docs/_static/dataset-logo-light.png new file mode 100644 index 0000000000000000000000000000000000000000..2feb425ed43f3242e0649acc91469cea2dfdc250 GIT binary patch literal 45276 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 literal 0 HcmV?d00001 diff --git a/docs/_themes/LICENSE b/docs/_themes/LICENSE deleted file mode 100755 index 3d1e04a..0000000 --- a/docs/_themes/LICENSE +++ /dev/null @@ -1,45 +0,0 @@ -Modifications: - -Copyright (c) 2011 Kenneth Reitz. - - -Original Project: - -Copyright (c) 2010 by Armin Ronacher. - - -Some rights reserved. - -Redistribution and use in source and binary forms of the theme, with or -without modification, are permitted provided that the following conditions -are met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - -* The names of the contributors may not be used to endorse or - promote products derived from this software without specific - prior written permission. - -We kindly ask you to only use these themes in an unmodified manner just -for Flask and Flask-related products, not for unrelated projects. If you -like the visual style and want to use it for your own projects, please -consider making some larger changes to the themes (such as changing -font faces, sizes, colors or margins). - -THIS THEME IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS THEME, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. diff --git a/docs/_themes/README.md b/docs/_themes/README.md deleted file mode 100755 index 91f0d6d..0000000 --- a/docs/_themes/README.md +++ /dev/null @@ -1,25 +0,0 @@ -krTheme Sphinx Style -==================== - -This repository contains sphinx styles Kenneth Reitz uses in most of -his projects. It is a derivative of Mitsuhiko's themes for Flask and Flask related -projects. To use this style in your Sphinx documentation, follow -this guide: - -1. put this folder as _themes into your docs folder. Alternatively - you can also use git submodules to check out the contents there. - -2. add this to your conf.py: - - sys.path.append(os.path.abspath('_themes')) - html_theme_path = ['_themes'] - html_theme = 'kr' - -The following themes exist: - -**kr** - the standard flask documentation theme for large projects - -**kr_small** - small one-page theme. Intended to be used by very small addon libraries. - diff --git a/docs/_themes/flask_theme_support.py b/docs/_themes/flask_theme_support.py deleted file mode 100755 index 0dcf53b..0000000 --- a/docs/_themes/flask_theme_support.py +++ /dev/null @@ -1,89 +0,0 @@ -# flasky extensions. flasky pygments style based on tango style -from pygments.style import Style -from pygments.token import ( - Keyword, - Name, - Comment, - String, - Error, - Number, - Operator, - Generic, - Whitespace, - Punctuation, - Other, - Literal, -) - - -class FlaskyStyle(Style): - background_color = "#f8f8f8" - default_style = "" - - styles = { - # No corresponding class for the following: - # Text: "", # class: '' - Whitespace: "underline #f8f8f8", # class: 'w' - Error: "#a40000 border:#ef2929", # class: 'err' - Other: "#000000", # class 'x' - Comment: "italic #8f5902", # class: 'c' - Comment.Preproc: "noitalic", # class: 'cp' - Keyword: "bold #004461", # class: 'k' - Keyword.Constant: "bold #004461", # class: 'kc' - Keyword.Declaration: "bold #004461", # class: 'kd' - Keyword.Namespace: "bold #004461", # class: 'kn' - Keyword.Pseudo: "bold #004461", # class: 'kp' - Keyword.Reserved: "bold #004461", # class: 'kr' - Keyword.Type: "bold #004461", # class: 'kt' - Operator: "#582800", # class: 'o' - Operator.Word: "bold #004461", # class: 'ow' - like keywords - Punctuation: "bold #000000", # class: 'p' - # because special names such as Name.Class, Name.Function, etc. - # are not recognized as such later in the parsing, we choose them - # to look the same as ordinary variables. - Name: "#000000", # class: 'n' - Name.Attribute: "#c4a000", # class: 'na' - to be revised - Name.Builtin: "#004461", # class: 'nb' - Name.Builtin.Pseudo: "#3465a4", # class: 'bp' - Name.Class: "#000000", # class: 'nc' - to be revised - Name.Constant: "#000000", # class: 'no' - to be revised - Name.Decorator: "#888", # class: 'nd' - to be revised - Name.Entity: "#ce5c00", # class: 'ni' - Name.Exception: "bold #cc0000", # class: 'ne' - Name.Function: "#000000", # class: 'nf' - Name.Property: "#000000", # class: 'py' - Name.Label: "#f57900", # class: 'nl' - Name.Namespace: "#000000", # class: 'nn' - to be revised - Name.Other: "#000000", # class: 'nx' - Name.Tag: "bold #004461", # class: 'nt' - like a keyword - Name.Variable: "#000000", # class: 'nv' - to be revised - Name.Variable.Class: "#000000", # class: 'vc' - to be revised - Name.Variable.Global: "#000000", # class: 'vg' - to be revised - Name.Variable.Instance: "#000000", # class: 'vi' - to be revised - Number: "#990000", # class: 'm' - Literal: "#000000", # class: 'l' - Literal.Date: "#000000", # class: 'ld' - String: "#4e9a06", # class: 's' - String.Backtick: "#4e9a06", # class: 'sb' - String.Char: "#4e9a06", # class: 'sc' - String.Doc: "italic #8f5902", # class: 'sd' - like a comment - String.Double: "#4e9a06", # class: 's2' - String.Escape: "#4e9a06", # class: 'se' - String.Heredoc: "#4e9a06", # class: 'sh' - String.Interpol: "#4e9a06", # class: 'si' - String.Other: "#4e9a06", # class: 'sx' - String.Regex: "#4e9a06", # class: 'sr' - String.Single: "#4e9a06", # class: 's1' - String.Symbol: "#4e9a06", # class: 'ss' - Generic: "#000000", # class: 'g' - Generic.Deleted: "#a40000", # class: 'gd' - Generic.Emph: "italic #000000", # class: 'ge' - Generic.Error: "#ef2929", # class: 'gr' - Generic.Heading: "bold #000080", # class: 'gh' - Generic.Inserted: "#00A000", # class: 'gi' - Generic.Output: "#888", # class: 'go' - Generic.Prompt: "#745334", # class: 'gp' - Generic.Strong: "bold #000000", # class: 'gs' - Generic.Subheading: "bold #800080", # class: 'gu' - Generic.Traceback: "bold #a40000", # class: 'gt' - } diff --git a/docs/_themes/kr/autotoc.html b/docs/_themes/kr/autotoc.html deleted file mode 100644 index 2c12261..0000000 --- a/docs/_themes/kr/autotoc.html +++ /dev/null @@ -1,25 +0,0 @@ -

{{ _('Table Of Contents') }}

- - -
    - - - diff --git a/docs/_themes/kr/layout.html b/docs/_themes/kr/layout.html deleted file mode 100755 index 087a852..0000000 --- a/docs/_themes/kr/layout.html +++ /dev/null @@ -1,29 +0,0 @@ -{%- extends "basic/layout.html" %} -{%- block extrahead %} - {{ super() }} - - {% if theme_touch_icon %} - - {% endif %} - -{% endblock %} - - -{% block sidebar2 %} - {{ sidebar() }} -{% endblock %} - -{%- block footer %} - -
    - -
    - - Fork me on GitHub - - -{%- endblock %} diff --git a/docs/_themes/kr/relations.html b/docs/_themes/kr/relations.html deleted file mode 100755 index 3bbcde8..0000000 --- a/docs/_themes/kr/relations.html +++ /dev/null @@ -1,19 +0,0 @@ -

    Related Topics

    - diff --git a/docs/_themes/kr/sidebarlogo.html b/docs/_themes/kr/sidebarlogo.html deleted file mode 100644 index 0c24425..0000000 --- a/docs/_themes/kr/sidebarlogo.html +++ /dev/null @@ -1,15 +0,0 @@ -dataset - -

    Because managing databases in Python should be as simple as reading and writing JSON files.

    - - - -

    Overview

    - - - - diff --git a/docs/_themes/kr/static/flasky.css_t b/docs/_themes/kr/static/flasky.css_t deleted file mode 100755 index 9879049..0000000 --- a/docs/_themes/kr/static/flasky.css_t +++ /dev/null @@ -1,559 +0,0 @@ -/* - * flasky.css_t - * ~~~~~~~~~~~~ - * - * :copyright: Copyright 2010 by Armin Ronacher. Modifications by Kenneth Reitz. - * :license: Flask Design License, see LICENSE for details. - */ - -{% set page_width = '940px' %} -{% set sidebar_width = '220px' %} - -@import url("basic.css"); - -/* -- page layout ----------------------------------------------------------- */ - -body { - font-family: "Georgia", "Open Sans", OpenSansRegular, sans-serif; - font-size: 16px; - background: #fff; - font-weight: 400; - color: #000; - margin: 0; - padding: 0; -} - -div.document { - width: {{ page_width }}; - margin: 30px auto 0 auto; -} - -div.documentwrapper { - float: left; - width: 100%; -} - -div.bodywrapper { - margin: 0 0 0 {{ sidebar_width }}; -} - -div.sphinxsidebar { - width: {{ sidebar_width }}; -} - -hr { - border: 1px solid #B1B4B6; -} - -div.body { - background-color: white; - color: #3E4349; - padding: 0 30px 0 30px; -} - -img.floatingflask { - padding: 0 0 10px 10px; - float: right; -} - -div.footer { - width: {{ page_width }}; - margin: 20px auto 30px auto; - font-size: 14px; - color: #888; - text-align: right; -} - -div.footer a { - color: #888; -} - -div.related { - display: none; -} - -div.sphinxsidebar a { - color: #444; - text-decoration: none; - border-bottom: 1px dotted #999; -} - -div.sphinxsidebar a:hover { - border-bottom: 1px solid #999; -} - -div.sphinxsidebar { - font-size: 14px; - line-height: 1.5; -} - -div.sphinxsidebarwrapper { - padding: 18px 10px; -} - -div.sphinxsidebarwrapper p.logo { - padding: 0; - margin: -10px 0 0 -20px; - text-align: center; -} - -div.sphinxsidebar h3, -div.sphinxsidebar h4 { - font-family: 'Antic Slab' ,'Garamond', 'Georgia', serif; - color: #000; - font-size: 24px; - font-weight: normal; - margin: 30px 0 5px 0; - padding: 0; -} - -div.sphinxsidebar h4 { - font-size: 20px; -} - -div.sphinxsidebar h3 a { - color: #000; -} - -div.sphinxsidebar p.logo a, -div.sphinxsidebar h3 a, -div.sphinxsidebar p.logo a:hover, -div.sphinxsidebar h3 a:hover { - border: none; -} - -div.sphinxsidebar p { - color: #555; - margin: 10px 0; -} - -div.sphinxsidebar ul { - margin: 10px 0px; - padding: 0; - color: #000; -} - -div.sphinxsidebar input { - border: 1px solid #ccc; - font-family: 'Georgia', serif; - font-size: 1em; -} - -/* -- body styles ----------------------------------------------------------- */ - -a { - color: #004B6B; - text-decoration: underline; -} - -a:hover { - color: #6D4100; - text-decoration: underline; -} - -div.body h1, -div.body h2, -div.body h3, -div.body h4, -div.body h5, -div.body h6 { - font-family: 'Antic Slab', serif; - font-weight: normal; - margin: 30px 0px 10px 0px; - padding: 0; - text-shadow: 1px 1px 3px #ddd; - color: #000; -} - -div.body h1 { margin-top: 0; padding-top: 0; font-size: 250%; } -div.body h2 { font-size: 190%; } -div.body h3 { font-size: 160%; } -div.body h4 { font-size: 140%; } -div.body h5 { font-size: 110%; } -div.body h6 { font-size: 110%; } - -a.headerlink { - color: #ddd; - padding: 0 4px; - text-decoration: none; -} - -a.headerlink:hover { - color: #444; - background: #eaeaea; -} - -div.body p, div.body dd, div.body li { - line-height: 1.4em; -} - -div.admonition { - background: #fafafa; - margin: 20px -30px; - padding: 10px 30px; - border-top: 1px solid #ccc; - border-bottom: 1px solid #ccc; -} - -div.admonition tt.xref, div.admonition a tt { - border-bottom: 1px solid #fafafa; -} - -dd div.admonition { - margin-left: -60px; - padding-left: 60px; -} - -div.admonition p.admonition-title { - font-family: 'Garamond', 'Georgia', serif; - font-weight: normal; - font-size: 24px; - margin: 0 0 10px 0; - padding: 0; - line-height: 1; -} - -div.admonition p.last { - margin-bottom: 0; -} - -div.highlight { - background-color: white; -} - -dt:target, .highlight { - background: #FAF3E8; -} - -div.note { - background-color: #eee; - border: 1px solid #ccc; -} - -div.seealso { - background-color: #ffc; - border: 1px solid #ff6; -} - -div.topic { - background-color: #eee; -} - -p.admonition-title { - display: inline; -} - -p.admonition-title:after { - content: ":"; -} - -pre { - font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; - font-size: 0.88em; -} - -tt { - font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; - font-size: 0.95em; -} - -img.screenshot { -} - -tt.descname, tt.descclassname { - font-size: 0.95em; -} - -tt.descname { - padding-right: 0.08em; -} - -img.screenshot { - -moz-box-shadow: 2px 2px 4px #eee; - -webkit-box-shadow: 2px 2px 4px #eee; - box-shadow: 2px 2px 4px #eee; -} - -table.docutils { - border: 1px solid #888; - -moz-box-shadow: 2px 2px 4px #eee; - -webkit-box-shadow: 2px 2px 4px #eee; - box-shadow: 2px 2px 4px #eee; -} - -table.docutils td, table.docutils th { - border: 1px solid #888; - padding: 0.25em 0.7em; -} - -table.field-list, table.footnote { - border: none; - -moz-box-shadow: none; - -webkit-box-shadow: none; - box-shadow: none; -} - -table.footnote { - margin: 15px 0; - width: 100%; - border: 1px solid #eee; - background: #fdfdfd; - font-size: 0.9em; -} - -table.footnote + table.footnote { - margin-top: -15px; - border-top: none; -} - -table.field-list th { - padding: 0 0.8em 0 0; -} - -table.field-list td { - padding: 0; -} - -table.footnote td.label { - width: 0px; - padding: 0.3em 0 0.3em 0.5em; -} - -table.footnote td { - padding: 0.3em 0.5em; -} - -dl { - margin: 0; - padding: 0; -} - -dl dd { - margin-left: 30px; -} - -blockquote { - margin: 0 0 0 30px; - padding: 0; -} - -ul, ol { - margin: 10px 0 10px 30px; - padding: 0; -} - -pre { - background: #eee; - padding: 7px 30px; - margin: 15px -30px; - line-height: 1.3em; -} - -dl pre, blockquote pre, li pre { - margin-left: 0px; - padding-left: 15px; -} - -dl dl pre { - margin-left: 0px; - padding-left: 15px; -} - -tt { - background-color: #ecf0f3; - color: #222; - /* padding: 1px 2px; */ -} - -tt.xref, a tt { - background-color: #FBFBFB; - color: #2277bb; - border-bottom: 1px solid white; -} - -a.reference { - text-decoration: none; - border-bottom: 1px dotted #004B6B; -} - -a.reference:hover { - border-bottom: 1px solid #6D4100; -} - -a.footnote-reference { - text-decoration: none; - font-size: 0.7em; - vertical-align: top; - border-bottom: 1px dotted #004B6B; -} - -a.footnote-reference:hover { - border-bottom: 1px solid #6D4100; -} - -a:hover tt { - background: #EEE; -} - -li { - margin-bottom: 0.3em; -} - - -@media screen and (max-width: 870px) { - - div.sphinxsidebar { - display: none; - } - - div.document { - width: 100%; - - } - - div.documentwrapper { - margin-left: 0; - margin-top: 0; - margin-right: 0; - margin-bottom: 0; - } - - div.bodywrapper { - margin-top: 0; - margin-right: 0; - margin-bottom: 0; - margin-left: 0; - } - - ul { - margin-left: 0; - } - - .document { - width: auto; - } - - .footer { - width: auto; - } - - .bodywrapper { - margin: 0; - } - - .footer { - width: auto; - } - - .github { - display: none; - } - - - -} - - - -@media screen and (max-width: 875px) { - - body { - margin: 0; - padding: 20px 30px; - } - - div.documentwrapper { - float: none; - background: white; - } - - div.sphinxsidebar { - display: block; - float: none; - width: 102.5%; - margin: 50px -30px -20px -30px; - padding: 10px 20px; - background: #333; - color: white; - } - - div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p, - div.sphinxsidebar h3 a { - color: white; - } - - div.sphinxsidebar a { - color: #aaa; - } - - div.sphinxsidebar p.logo { - display: none; - } - - div.document { - width: 100%; - margin: 0; - } - - div.related { - display: block; - margin: 0; - padding: 10px 0 20px 0; - } - - div.related ul, - div.related ul li { - margin: 0; - padding: 0; - } - - div.footer { - display: none; - } - - div.bodywrapper { - margin: 0; - } - - div.body { - min-height: 0; - padding: 0; - } - - - .rtd_doc_footer { - display: none; - } - - .document { - width: auto; - } - - .footer { - width: auto; - } - - .footer { - width: auto; - } - - .github { - display: none; - } -} - - -/* misc. */ - -.revsys-inline { - display: none!important; -} - -div.sphinxsidebar #searchbox input[type="text"] { - width: 140px; - padding: 4px 3px; -} - -.highlight .nv { - color: #C65D09!important; -} diff --git a/docs/_themes/kr/theme.conf b/docs/_themes/kr/theme.conf deleted file mode 100755 index 07698f6..0000000 --- a/docs/_themes/kr/theme.conf +++ /dev/null @@ -1,7 +0,0 @@ -[theme] -inherit = basic -stylesheet = flasky.css -pygments_style = flask_theme_support.FlaskyStyle - -[options] -touch_icon = diff --git a/docs/api.rst b/docs/api.rst index 1986ed6..477f0bc 100644 --- a/docs/api.rst +++ b/docs/api.rst @@ -33,11 +33,7 @@ Table Data Export ----------- - **Note:** Data exporting has been extracted into a stand-alone package, datafreeze. See the relevant repository here_. .. _here: https://github.com/pudo/datafreeze -| - -.. autofunction:: datafreeze.freeze diff --git a/docs/conf.py b/docs/conf.py index 870f582..87fcb53 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -41,16 +41,16 @@ master_doc = "index" # General information about the project. project = u"dataset" -copyright = u"2013-2018, Friedrich Lindenberg, Gregor Aisch, Stefan Wehrmeyer" +copyright = u"2013-2021, Friedrich Lindenberg, Gregor Aisch, Stefan Wehrmeyer" # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. -version = "1.0" +version = "1.4.2" # The full version, including alpha/beta/rc tags. -release = "1.0.8" +release = "1.4.2" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -94,175 +94,17 @@ pygments_style = "sphinx" # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. -html_theme = "kr" +html_theme = "furo" -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -# html_theme_options = { -# 'stickysidebar': "true" -# } - -# Add any paths that contain custom themes here, relative to this directory. -html_theme_path = ["_themes"] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -# html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -# html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -# html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -# html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ["_static"] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -# html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -# html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -html_sidebars = { - "index": ["sidebarlogo.html", "sourcelink.html", "searchbox.html"], - "api": ["sidebarlogo.html", "autotoc.html", "sourcelink.html", "searchbox.html"], - "**": ["sidebarlogo.html", "localtoc.html", "sourcelink.html", "searchbox.html"], +html_theme_options = { + "light_logo": "dataset-logo-light.png", + "dark_logo": "dataset-logo-dark.png", } -# Additional templates that should be rendered to pages, maps page names to -# template names. -# html_additional_pages = {} - -# If false, no module index is generated. -# html_domain_indices = True - -# If false, no index is generated. -# html_use_index = True - -# If true, the index is split into individual pages for each letter. -# html_split_index = False - # If true, links to the reST sources are added to the pages. html_show_sourcelink = False -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -# html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -# html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -# html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -# html_file_suffix = None # Output file base name for HTML help builder. htmlhelp_basename = "datasetdoc" - - -# -- Options for LaTeX output -------------------------------------------------- - -latex_elements = { - # The paper size ('letterpaper' or 'a4paper'). - #'papersize': 'letterpaper', - # The font size ('10pt', '11pt' or '12pt'). - #'pointsize': '10pt', - # Additional stuff for the LaTeX preamble. - #'preamble': '', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, documentclass [howto/manual]). -latex_documents = [ - ( - "index", - "dataset.tex", - u"dataset Documentation", - u"Friedrich Lindenberg, Gregor Aisch, Stefan Wehrmeyer", - "manual", - ), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -# latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -# latex_use_parts = False - -# If true, show page references after internal links. -# latex_show_pagerefs = False - -# If true, show URL addresses after external links. -# latex_show_urls = False - -# Documents to append as an appendix to all manuals. -# latex_appendices = [] - -# If false, no module index is generated. -# latex_domain_indices = True - - -# -- Options for manual page output -------------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - ( - "index", - "dataset", - u"dataset Documentation", - [u"Friedrich Lindenberg, Gregor Aisch, Stefan Wehrmeyer"], - 1, - ) -] - -# If true, show URL addresses after external links. -# man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------------ - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - ( - "index", - "dataset", - u"dataset Documentation", - u"Friedrich Lindenberg, Gregor Aisch, Stefan Wehrmeyer", - "dataset", - "Databases for lazy people.", - "Miscellaneous", - ), -] - -# Documents to append as an appendix to all manuals. -# texinfo_appendices = [] - -# If false, no module index is generated. -# texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -# texinfo_show_urls = 'footnote' - -# If true, do not generate a @detailmenu in the "Top" node's menu. -# texinfo_no_detailmenu = False diff --git a/docs/index.rst b/docs/index.rst index 59990ce..1a72b0f 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -62,6 +62,7 @@ Contents install quickstart api + queries Contributors ------------ diff --git a/docs/queries.rst b/docs/queries.rst new file mode 100644 index 0000000..86d26ff --- /dev/null +++ b/docs/queries.rst @@ -0,0 +1,53 @@ + +.. _advanced_filters: + +Advanced filters +================ + +``dataset`` provides two methods for running queries: :py:meth:`table.find() ` +and :py:meth:`db.query() `. The table find helper method provides +limited, but simple filtering options:: + + results = table.find((column, operator, value)) + # e.g.: + results = table.find(('name', 'like', '%mole rat%')) + +A special form is using keyword searches on specific columns:: + + results = table.find(value=5) + # equal to: + results = table.find((value, '=', 5)) + +The following comparison operators are supported: + +============== ============================================================ +Operator Description +============== ============================================================ +gt, > Greater than +lt, < Less than +gte, >= Greater or equal +lte, <= Less or equal +!=, <>, not Not equal to a single value +in Value is in the given sequence +like, ilike Text search, ILIKE is case-insensitive. Use ``%`` as a wildcard +between, .. Value is between two values in the given tuple +startswith String starts with +endswith String ends with +============== ============================================================ + +Querying for a specific value on a column that does not exist on the table +will return no results. + +Queries using raw SQL +--------------------- + +To run more complex queries with JOINs, or to perform GROUP BY-style +aggregation, you can also use :py:meth:`db.query() ` +to run raw SQL queries instead. This also supports paramterisation to avoid +SQL injections. + +Finally, you should consider falling back to SQLAlchemy_ core to construct +queries if you are looking for a programmatic, composable method of generating +SQL in Python. + +.. _SQLALchemy: https://docs.sqlalchemy.org/ \ No newline at end of file diff --git a/docs/quickstart.rst b/docs/quickstart.rst index 1a9b676..359e8a0 100644 --- a/docs/quickstart.rst +++ b/docs/quickstart.rst @@ -142,20 +142,13 @@ We can search for specific entries using :py:meth:`find() ` winners = table.find(id=[1, 3, 7]) # Find by comparison operator - elderly_users = table.find(age={'>=': 70}) - possible_customers = table.find(age={'between': [21, 80]}) + elderly_users = table.find((age, '>=', 70)) + possible_customers = table.find((age, 'between', [21, 80])) # Use the underlying SQLAlchemy directly elderly_users = table.find(table.table.columns.age >= 70) -Possible comparison operators:: - - gt, > - lt, < - gte, >= - lte, <= - !=, <>, not - between, .. +See :ref:`advanced_filters` for details on complex filters. Using :py:meth:`distinct() ` we can grab a set of rows with unique values in one or more columns:: @@ -192,3 +185,30 @@ programmatic construction of more complex queries:: table = db['user'].table statement = table.select(table.c.name.like('%John%')) result = db.query(statement) + +Limitations of dataset +---------------------- + +The goal of ``dataset`` is to make basic database operations simpler, by expressing +some relatively basic operations in a Pythonic way. The downside of this approach +is that as your application grows more complex, you may begin to need access to +more advanced operations and be forced to switch to using SQLAlchemy proper, +without the dataset layer (instead, you may want to play with SQLAlchemy's ORM). + +When that moment comes, take the hit. SQLAlchemy is an amazing piece of Python +code, and it will provide you with idiomatic access to all of SQL's functions. + +Some of the specific aspects of SQL that are not exposed in ``dataset``, and are +considered out of scope for the project, include: + +* Foreign key relationships between tables, and expressing one-to-many and + many-to-many relationships in idiomatic Python. +* Python-wrapped ``JOIN`` queries. +* Creating databases, or managing DBMS software. +* Support for Python 2.x + +There's also some functionality that might be cool to support in the future, but +that requires signficant engineering: + +* Async operations +* Database-native ``UPSERT`` semantics diff --git a/docs/requirements.txt b/docs/requirements.txt index 04d359a..9e279e7 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1 +1 @@ -datafreeze +furo \ No newline at end of file