{ "info": { "author": "laughingman7743", "author_email": "laughingman7743@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Database :: Front-Ends" ], "description": ".. image:: https://img.shields.io/pypi/pyversions/PyAthena.svg\n :target: https://pypi.python.org/pypi/PyAthena/\n\n.. image:: https://travis-ci.org/laughingman7743/PyAthena.svg?branch=master\n :target: https://travis-ci.org/laughingman7743/PyAthena\n\n.. image:: https://codecov.io/gh/laughingman7743/PyAthena/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/laughingman7743/PyAthena\n\n.. image:: https://img.shields.io/pypi/l/PyAthena.svg\n :target: https://github.com/laughingman7743/PyAthena/blob/master/LICENSE\n\n.. image:: https://img.shields.io/pypi/dm/PyAthena.svg\n :target: https://pypistats.org/packages/pyathena\n\n\nPyAthena\n========\n\nPyAthena is a Python `DB API 2.0 (PEP 249)`_ compliant client for `Amazon Athena`_.\n\n.. _`DB API 2.0 (PEP 249)`: https://www.python.org/dev/peps/pep-0249/\n.. _`Amazon Athena`: http://docs.aws.amazon.com/athena/latest/APIReference/Welcome.html\n\nRequirements\n------------\n\n* Python\n\n - CPython 2,7, 3.5, 3.6, 3.7\n\nInstallation\n------------\n\n.. code:: bash\n\n $ pip install PyAthena\n\nExtra packages:\n\n+---------------+--------------------------------------+------------------+\n| Package | Install command | Version |\n+===============+======================================+==================+\n| Pandas | ``pip install PyAthena[Pandas]`` | >=0.24.0 |\n+---------------+--------------------------------------+------------------+\n| SQLAlchemy | ``pip install PyAthena[SQLAlchemy]`` | >=1.0.0, <2.0.0 |\n+---------------+--------------------------------------+------------------+\n\nUsage\n-----\n\nBasic usage\n~~~~~~~~~~~\n\n.. code:: python\n\n from pyathena import connect\n\n cursor = connect(aws_access_key_id='YOUR_ACCESS_KEY_ID',\n aws_secret_access_key='YOUR_SECRET_ACCESS_KEY',\n s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2').cursor()\n cursor.execute(\"SELECT * FROM one_row\")\n print(cursor.description)\n print(cursor.fetchall())\n\nCursor iteration\n~~~~~~~~~~~~~~~~\n\n.. code:: python\n\n from pyathena import connect\n\n cursor = connect(aws_access_key_id='YOUR_ACCESS_KEY_ID',\n aws_secret_access_key='YOUR_SECRET_ACCESS_KEY',\n s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2').cursor()\n cursor.execute(\"SELECT * FROM many_rows LIMIT 10\")\n for row in cursor:\n print(row)\n\nQuery with parameter\n~~~~~~~~~~~~~~~~~~~~\n\nSupported `DB API paramstyle`_ is only ``PyFormat``.\n``PyFormat`` only supports `named placeholders`_ with old ``%`` operator style and parameters specify dictionary format.\n\n.. code:: python\n\n from pyathena import connect\n\n cursor = connect(aws_access_key_id='YOUR_ACCESS_KEY_ID',\n aws_secret_access_key='YOUR_SECRET_ACCESS_KEY',\n s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2').cursor()\n cursor.execute(\"\"\"\n SELECT col_string FROM one_row_complex\n WHERE col_string = %(param)s\n \"\"\", {'param': 'a string'})\n print(cursor.fetchall())\n\nif ``%`` character is contained in your query, it must be escaped with ``%%`` like the following:\n\n.. code:: sql\n\n SELECT col_string FROM one_row_complex\n WHERE col_string = %(param)s OR col_string LIKE 'a%%'\n\n.. _`DB API paramstyle`: https://www.python.org/dev/peps/pep-0249/#paramstyle\n.. _`named placeholders`: https://pyformat.info/#named_placeholders\n\nSQLAlchemy\n~~~~~~~~~~\n\nInstall SQLAlchemy with ``pip install \"SQLAlchemy>=1.0.0, <2.0.0\"`` or ``pip install PyAthena[SQLAlchemy]``.\nSupported SQLAlchemy is 1.0.0 or higher and less than 2.0.0.\n\n.. code:: python\n\n from urllib.parse import quote_plus # PY2: from urllib import quote_plus\n from sqlalchemy.engine import create_engine\n from sqlalchemy.sql.expression import select\n from sqlalchemy.sql.functions import func\n from sqlalchemy.sql.schema import Table, MetaData\n\n conn_str = 'awsathena+rest://{aws_access_key_id}:{aws_secret_access_key}@athena.{region_name}.amazonaws.com:443/'\\\n '{schema_name}?s3_staging_dir={s3_staging_dir}'\n engine = create_engine(conn_str.format(\n aws_access_key_id=quote_plus('YOUR_ACCESS_KEY_ID'),\n aws_secret_access_key=quote_plus('YOUR_SECRET_ACCESS_KEY'),\n region_name='us-west-2',\n schema_name='default',\n s3_staging_dir=quote_plus('s3://YOUR_S3_BUCKET/path/to/')))\n many_rows = Table('many_rows', MetaData(bind=engine), autoload=True)\n print(select([func.count('*')], from_obj=many_rows).scalar())\n\nThe connection string has the following format:\n\n.. code:: python\n\n awsathena+rest://{aws_access_key_id}:{aws_secret_access_key}@athena.{region_name}.amazonaws.com:443/{schema_name}?s3_staging_dir={s3_staging_dir}&...\n\nIf you do not specify ``aws_access_key_id`` and ``aws_secret_access_key`` using instance profile or boto3 configuration file:\n\n.. code:: python\n\n awsathena+rest://:@athena.{region_name}.amazonaws.com:443/{schema_name}?s3_staging_dir={s3_staging_dir}&...\n\nNOTE: ``s3_staging_dir`` requires quote. If ``aws_access_key_id``, ``aws_secret_access_key`` and other parameter contain special characters, quote is also required.\n\nPandas\n~~~~~~\n\nMinimal example for Pandas DataFrame:\n\n.. code:: python\n\n from pyathena import connect\n import pandas as pd\n\n conn = connect(aws_access_key_id='YOUR_ACCESS_KEY_ID',\n aws_secret_access_key='YOUR_SECRET_ACCESS_KEY',\n s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2')\n df = pd.read_sql(\"SELECT * FROM many_rows\", conn)\n print(df.head())\n\nAs Pandas DataFrame:\n\n.. code:: python\n\n from pyathena import connect\n from pyathena.util import as_pandas\n\n cursor = connect(aws_access_key_id='YOUR_ACCESS_KEY_ID',\n aws_secret_access_key='YOUR_SECRET_ACCESS_KEY',\n s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2').cursor()\n cursor.execute(\"SELECT * FROM many_rows\")\n df = as_pandas(cursor)\n print(df.describe())\n\nIf you want to use Pandas `DataFrame object`_ directly, you can use `PandasCursor`_.\n\nAsynchronousCursor\n~~~~~~~~~~~~~~~~~~\n\nAsynchronousCursor is a simple implementation using the concurrent.futures package.\nPython 2.7 uses `backport of the concurrent.futures`_ package.\nThis cursor is not `DB API 2.0 (PEP 249)`_ compliant.\n\nYou can use the AsynchronousCursor by specifying the ``cursor_class``\nwith the connect method or connection object.\n\n.. code:: python\n\n from pyathena import connect\n from pyathena.async_cursor import AsyncCursor\n\n cursor = connect(s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2',\n cursor_class=AsyncCursor).cursor()\n\n.. code:: python\n\n from pyathena.connection import Connection\n from pyathena.async_cursor import AsyncCursor\n\n cursor = Connection(s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2',\n cursor_class=AsyncCursor).cursor()\n\nIt can also be used by specifying the cursor class when calling the connection object's cursor method.\n\n.. code:: python\n\n from pyathena import connect\n from pyathena.async_cursor import AsyncCursor\n\n cursor = connect(s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2').cursor(AsyncCursor)\n\n.. code:: python\n\n from pyathena.connection import Connection\n from pyathena.async_cursor import AsyncCursor\n\n cursor = Connection(s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2').cursor(AsyncCursor)\n\nThe default number of workers is 5 or cpu number * 5.\nIf you want to change the number of workers you can specify like the following.\n\n.. code:: python\n\n from pyathena import connect\n from pyathena.async_cursor import AsyncCursor\n\n cursor = connect(s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2',\n cursor_class=AsyncCursor).cursor(max_workers=10)\n\nThe execute method of the AsynchronousCursor returns the tuple of the query ID and the `future object`_.\n\n.. code:: python\n\n from pyathena import connect\n from pyathena.async_cursor import AsyncCursor\n\n cursor = connect(s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2',\n cursor_class=AsyncCursor).cursor()\n\n query_id, future = cursor.execute(\"SELECT * FROM many_rows\")\n\nThe return value of the `future object`_ is an ``AthenaResultSet`` object.\nThis object has an interface that can fetch and iterate query results similar to synchronous cursors.\nIt also has information on the result of query execution.\n\n.. code:: python\n\n from pyathena import connect\n from pyathena.async_cursor import AsyncCursor\n\n cursor = connect(s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2',\n cursor_class=AsyncCursor).cursor()\n\n query_id, future = cursor.execute(\"SELECT * FROM many_rows\")\n result_set = future.result()\n print(result_set.state)\n print(result_set.state_change_reason)\n print(result_set.completion_date_time)\n print(result_set.submission_date_time)\n print(result_set.data_scanned_in_bytes)\n print(result_set.execution_time_in_millis)\n print(result_set.output_location)\n print(result_set.description)\n for row in result_set:\n print(row)\n\n.. code:: python\n\n from pyathena import connect\n from pyathena.async_cursor import AsyncCursor\n\n cursor = connect(s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2',\n cursor_class=AsyncCursor).cursor()\n\n query_id, future = cursor.execute(\"SELECT * FROM many_rows\")\n result_set = future.result()\n print(result_set.fetchall())\n\nA query ID is required to cancel a query with the AsynchronousCursor.\n\n.. code:: python\n\n from pyathena import connect\n from pyathena.async_cursor import AsyncCursor\n\n cursor = connect(s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2',\n cursor_class=AsyncCursor).cursor()\n\n query_id, future = cursor.execute(\"SELECT * FROM many_rows\")\n cursor.cancel(query_id)\n\nNOTE: The cancel method of the `future object`_ does not cancel the query.\n\n.. _`backport of the concurrent.futures`: https://pypi.python.org/pypi/futures\n.. _`future object`: https://docs.python.org/3/library/concurrent.futures.html#future-objects\n\nPandasCursor\n~~~~~~~~~~~~\n\nPandasCursor directly handles the CSV file of the query execution result output to S3.\nThis cursor is to download the CSV file after executing the query, and then loaded into `DataFrame object`_.\nPerformance is better than fetching data with a cursor.\n\nYou can use the PandasCursor by specifying the ``cursor_class``\nwith the connect method or connection object.\n\n.. code:: python\n\n from pyathena import connect\n from pyathena.pandas_cursor import PandasCursor\n\n cursor = connect(s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2',\n cursor_class=PandasCursor).cursor()\n\n.. code:: python\n\n from pyathena.connection import Connection\n from pyathena.pandas_cursor import PandasCursor\n\n cursor = Connection(s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2',\n cursor_class=PandasCursor).cursor()\n\nIt can also be used by specifying the cursor class when calling the connection object's cursor method.\n\n.. code:: python\n\n from pyathena import connect\n from pyathena.pandas_cursor import PandasCursor\n\n cursor = connect(s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2').cursor(PandasCursor)\n\n.. code:: python\n\n from pyathena.connection import Connection\n from pyathena.pandas_cursor import PandasCursor\n\n cursor = Connection(s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2').cursor(PandasCursor)\n\nThe as_pandas method returns a `DataFrame object`_.\n\n.. code:: python\n\n from pyathena import connect\n from pyathena.pandas_cursor import PandasCursor\n\n cursor = connect(s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2',\n cursor_class=PandasCursor).cursor()\n\n df = cursor.execute(\"SELECT * FROM many_rows\").as_pandas()\n print(df.describe())\n print(df.head())\n\nSupport fetch and iterate query results.\n\n.. code:: python\n\n from pyathena import connect\n from pyathena.pandas_cursor import PandasCursor\n\n cursor = connect(s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2',\n cursor_class=PandasCursor).cursor()\n\n cursor.execute(\"SELECT * FROM many_rows\")\n print(cursor.fetchone())\n print(cursor.fetchmany())\n print(cursor.fetchall())\n\n.. code:: python\n\n from pyathena import connect\n from pyathena.pandas_cursor import PandasCursor\n\n cursor = connect(s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2',\n cursor_class=PandasCursor).cursor()\n\n cursor.execute(\"SELECT * FROM many_rows\")\n for row in cursor:\n print(row)\n\nThe DATE and TIMESTAMP of Athena's data type are returned as `pandas.Timestamp`_ type.\n\n.. code:: python\n\n from pyathena import connect\n from pyathena.pandas_cursor import PandasCursor\n\n cursor = connect(s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2',\n cursor_class=PandasCursor).cursor()\n\n cursor.execute(\"SELECT col_timestamp FROM one_row_complex\")\n print(type(cursor.fetchone()[0])) # \n\nExecution information of the query can also be retrieved.\n\n.. code:: python\n\n from pyathena import connect\n from pyathena.pandas_cursor import PandasCursor\n\n cursor = connect(s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2',\n cursor_class=PandasCursor).cursor()\n\n cursor.execute(\"SELECT * FROM many_rows\")\n print(cursor.state)\n print(cursor.state_change_reason)\n print(cursor.completion_date_time)\n print(cursor.submission_date_time)\n print(cursor.data_scanned_in_bytes)\n print(cursor.execution_time_in_millis)\n print(cursor.output_location)\n\nNOTE: PandasCursor handles the CSV file on memory. Pay attention to the memory capacity.\n\n.. _`DataFrame object`: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html\n.. _`pandas.Timestamp`: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Timestamp.html\n\nAsyncPandasCursor\n~~~~~~~~~~~~~~~~~\n\nAsyncPandasCursor is an AsyncCursor that can handle Pandas DataFrame.\nThis cursor directly handles the CSV of query results output to S3 in the same way as PandasCursor.\n\nYou can use the AsyncPandasCursor by specifying the ``cursor_class``\nwith the connect method or connection object.\n\n.. code:: python\n\n from pyathena import connect\n from pyathena.async_pandas_cursor import AsyncPandasCursor\n\n cursor = connect(s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2',\n cursor_class=AsyncPandasCursor).cursor()\n\n.. code:: python\n\n from pyathena.connection import Connection\n from pyathena.async_pandas_cursor import AsyncPandasCursor\n\n cursor = Connection(s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2',\n cursor_class=AsyncPandasCursor).cursor()\n\nIt can also be used by specifying the cursor class when calling the connection object's cursor method.\n\n.. code:: python\n\n from pyathena import connect\n from pyathena.async_pandas_cursor import AsyncPandasCursor\n\n cursor = connect(s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2').cursor(AsyncPandasCursor)\n\n.. code:: python\n\n from pyathena.connection import Connection\n from pyathena.async_pandas_cursor import AsyncPandasCursor\n\n cursor = Connection(s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2').cursor(AsyncPandasCursor)\n\nThe default number of workers is 5 or cpu number * 5.\nIf you want to change the number of workers you can specify like the following.\n\n.. code:: python\n\n from pyathena import connect\n from pyathena.async_pandas_cursor import AsyncPandasCursor\n\n cursor = connect(s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2',\n cursor_class=AsyncPandasCursor).cursor(max_workers=10)\n\nThe execute method of the AsynchronousPandasCursor returns the tuple of the query ID and the `future object`_.\n\n.. code:: python\n\n from pyathena import connect\n from pyathena.async_pandas_cursor import AsyncPandasCursor\n\n cursor = connect(s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2',\n cursor_class=AsyncPandasCursor).cursor()\n\n query_id, future = cursor.execute(\"SELECT * FROM many_rows\")\n\nThe return value of the `future object`_ is an ``AthenaPandasResultSet`` object.\nThis object has an interface similar to ``AthenaResultSetObject``.\n\n.. code:: python\n\n from pyathena import connect\n from pyathena.async_pandas_cursor import AsyncPandasCursor\n\n cursor = connect(s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2',\n cursor_class=AsyncPandasCursor).cursor()\n\n query_id, future = cursor.execute(\"SELECT * FROM many_rows\")\n result_set = future.result()\n print(result_set.state)\n print(result_set.state_change_reason)\n print(result_set.completion_date_time)\n print(result_set.submission_date_time)\n print(result_set.data_scanned_in_bytes)\n print(result_set.execution_time_in_millis)\n print(result_set.output_location)\n print(result_set.description)\n for row in result_set:\n print(row)\n\n.. code:: python\n\n from pyathena import connect\n from pyathena.async_pandas_cursor import AsyncPandasCursor\n\n cursor = connect(s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2',\n cursor_class=AsyncPandasCursor).cursor()\n\n query_id, future = cursor.execute(\"SELECT * FROM many_rows\")\n result_set = future.result()\n print(result_set.fetchall())\n\nThis object also has an as_pandas method that returns a `DataFrame object`_ similar to the PandasCursor.\n\n.. code:: python\n\n from pyathena import connect\n from pyathena.async_pandas_cursor import AsyncPandasCursor\n\n cursor = connect(s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2',\n cursor_class=AsyncPandasCursor).cursor()\n\n query_id, future = cursor.execute(\"SELECT * FROM many_rows\")\n result_set = future.result()\n df = result_set.as_pandas()\n print(df.describe())\n print(df.head())\n\nThe DATE and TIMESTAMP of Athena's data type are returned as `pandas.Timestamp`_ type.\n\n.. code:: python\n\n from pyathena import connect\n from pyathena.async_pandas_cursor import AsyncPandasCursor\n\n cursor = connect(s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2',\n cursor_class=AsyncPandasCursor).cursor()\n\n query_id, future = cursor.execute(\"SELECT col_timestamp FROM one_row_complex\")\n result_set = future.result()\n print(type(result_set.fetchone()[0])) # \n\nAs with AsynchronousCursor, you need a query ID to cancel a query.\n\n.. code:: python\n\n from pyathena import connect\n from pyathena.async_pandas_cursor import AsyncPandasCursor\n\n cursor = connect(s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2',\n cursor_class=AsyncPandasCursor).cursor()\n\n query_id, future = cursor.execute(\"SELECT * FROM many_rows\")\n cursor.cancel(query_id)\n\nQuickly re-run queries\n~~~~~~~~~~~~~~~~~~~~~~\n\nYou can attempt to re-use the results from a previously run query to help save time and money in the cases where your underlying data isn't changing. Set the ``cache_size`` parameter of ``cursor.execute()`` to a number larger than 0 to enable cacheing.\n\n.. code:: python\n\n from pyathena import connect\n\n cursor = connect(aws_access_key_id='YOUR_ACCESS_KEY_ID',\n aws_secret_access_key='YOUR_SECRET_ACCESS_KEY',\n s3_staging_dir='s3://YOUR_S3_BUCKET/path/to/',\n region_name='us-west-2').cursor()\n cursor.execute(\"SELECT * FROM one_row\") # run once\n print(cursor.query_id)\n cursor.execute(\"SELECT * FROM one_row\", cache_size=10) # re-use earlier results\n print(cursor.query_id) # You should expect to see the same Query ID\n\nResults will only be re-used if the query strings match *exactly*, and the query was a DML statement (the assumption being that you always want to re-run queries like ``CREATE TABLE`` and ``DROP TABLE``).\n\nThe S3 staging directory is not checked, so it's possible that the location of the results is not in your provided ``s3_staging_dir``.\n\nCredentials\n-----------\n\nSupport `Boto3 credentials`_.\n\n.. _`Boto3 credentials`: http://boto3.readthedocs.io/en/latest/guide/configuration.html\n\nAdditional environment variable:\n\n.. code:: bash\n\n $ export AWS_ATHENA_S3_STAGING_DIR=s3://YOUR_S3_BUCKET/path/to/\n\nTesting\n-------\n\nDepends on the following environment variables:\n\n.. code:: bash\n\n $ export AWS_ACCESS_KEY_ID=YOUR_ACCESS_KEY_ID\n $ export AWS_SECRET_ACCESS_KEY=YOUR_SECRET_ACCESS_KEY\n $ export AWS_DEFAULT_REGION=us-west-2\n $ export AWS_ATHENA_S3_STAGING_DIR=s3://YOUR_S3_BUCKET/path/to/\n\nRun test\n~~~~~~~~\n\n.. code:: bash\n\n $ pip install pipenv\n $ pipenv install --dev\n $ pipenv run scripts/test_data/upload_test_data.sh\n $ pipenv run pytest\n $ pipenv run scripts/test_data/delete_test_data.sh\n\nRun test multiple Python versions\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n.. code:: bash\n\n $ pip install pipenv\n $ pipenv install --dev\n $ pipenv run scripts/test_data/upload_test_data.sh\n $ pyenv local 3.7.2 3.6.8 3.5.7 2.7.16\n $ pipenv run tox\n $ pipenv run scripts/test_data/delete_test_data.sh", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/laughingman7743/PyAthena/", "keywords": "", "license": "MIT License", "maintainer": "", "maintainer_email": "", "name": "PyAthena", "package_url": "https://pypi.org/project/PyAthena/", "platform": "", "project_url": "https://pypi.org/project/PyAthena/", "project_urls": { "Homepage": "https://github.com/laughingman7743/PyAthena/" }, "release_url": "https://pypi.org/project/PyAthena/1.8.0/", "requires_dist": null, "requires_python": "", "summary": "Python DB API 2.0 (PEP 249) compliant client for Amazon Athena", "version": "1.8.0" }, "last_serial": 5969107, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "f1e23678368e51b9072828d6befbf5aa", "sha256": "1bfb7000d546ba7c342bf4d94bed2c8632e5afb342cbffd9a7ff7b9771230771" }, "downloads": -1, "filename": "PyAthena-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f1e23678368e51b9072828d6befbf5aa", "packagetype": "bdist_wheel", "python_version": "3.5", "requires_python": null, "size": 15308, "upload_time": "2017-05-20T23:03:52", "url": "https://files.pythonhosted.org/packages/ce/26/7a67f35b3071167c8a4fce677cb3ae1971ea51d65d5626bac9872903a158/PyAthena-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "36c52c019799f4597c9d73e62ba30962", "sha256": "0e333963f19404225673e348c244f3c780e10de1b2b8ea669ba8e20ae3199db8" }, "downloads": -1, "filename": "PyAthena-1.0.0.tar.gz", "has_sig": false, "md5_digest": "36c52c019799f4597c9d73e62ba30962", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12068, "upload_time": "2017-05-20T23:03:33", "url": "https://files.pythonhosted.org/packages/28/ea/1cac5d5ba1f484a04e96032ead8f721ce5766e262def1d5545f419ee2b17/PyAthena-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "a0b4f7f8173fb744095c255074e1306b", "sha256": "5ba916a3cc3814386718f6f8049a9b85563f28ba6f77c9d40349d43da2e95f71" }, "downloads": -1, "filename": "PyAthena-1.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a0b4f7f8173fb744095c255074e1306b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16519, "upload_time": "2017-05-28T10:30:42", "url": "https://files.pythonhosted.org/packages/a8/af/df161b38d94819d673f70145a2b0842629c5557c2a7aac2b3d7635d9a7b8/PyAthena-1.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "53b0c1c03bde3376082244307e2dbbaa", "sha256": "cbcc20339bfedace8386da1317e539128b44af2a6f657de9fed09ed5f075c23b" }, "downloads": -1, "filename": "PyAthena-1.0.1.tar.gz", "has_sig": false, "md5_digest": "53b0c1c03bde3376082244307e2dbbaa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12971, "upload_time": "2017-05-28T10:30:27", "url": "https://files.pythonhosted.org/packages/92/94/2f06a5315e0a997d59276ccd85d34cd0a91f4eec9d8f8c3c3eefa420292d/PyAthena-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "f00a52589b0fdfc08e7918b23f31aec0", "sha256": "fa07421dd3182f14d5792c7bd795355b06fecb0204c93ed35bf79a8455d37064" }, "downloads": -1, "filename": "PyAthena-1.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f00a52589b0fdfc08e7918b23f31aec0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16576, "upload_time": "2017-06-04T07:23:39", "url": "https://files.pythonhosted.org/packages/06/4d/0c60f3258302a4f5f738fe4ce32ad3275100bbda56bc3c9f76697b82a6d5/PyAthena-1.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ed5eae04cb9db05ef55272efd5577b0a", "sha256": "69d107feb1c8fde45ae0394a2feb5dd0a78e004a71780a66f191c41af332f323" }, "downloads": -1, "filename": "PyAthena-1.0.2.tar.gz", "has_sig": false, "md5_digest": "ed5eae04cb9db05ef55272efd5577b0a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13046, "upload_time": "2017-06-04T07:17:03", "url": "https://files.pythonhosted.org/packages/8b/fa/ed08726c5a36d3c5e1be639f9c8050dbd91a6986d43e824ea593c68863ba/PyAthena-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "c505193cabcd172df2b8b8e3e4c606d8", "sha256": "56dcf2f00a56f5afedcf0221f91fc97055cf98ba8b76769157f9e08cc3cf243c" }, "downloads": -1, "filename": "PyAthena-1.0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c505193cabcd172df2b8b8e3e4c606d8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16586, "upload_time": "2017-07-07T22:09:22", "url": "https://files.pythonhosted.org/packages/56/e1/d0d9febbf891632b51a70c7eeb00220ffa85fcfdd2c997273a0da6d05f62/PyAthena-1.0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "94cc062e02edeb10867ea50c9a3fb739", "sha256": "fd4f899d7a1891b59e7a700f88e10741b7414827d08a5d898126d9875f1e6770" }, "downloads": -1, "filename": "PyAthena-1.0.3.tar.gz", "has_sig": false, "md5_digest": "94cc062e02edeb10867ea50c9a3fb739", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13053, "upload_time": "2017-07-07T22:09:11", "url": "https://files.pythonhosted.org/packages/ba/1d/2ba0f09f89a719955de2aa726adb732ee4651e0ca028fbc93f7d4c4b9c98/PyAthena-1.0.3.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "7f836ef979720231efc170751ac14935", "sha256": "e45c57d4b52b6cc2921beae2e60f7024fa86315a90c9c23eee5321400302740c" }, "downloads": -1, "filename": "PyAthena-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7f836ef979720231efc170751ac14935", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 16592, "upload_time": "2017-07-29T02:53:23", "url": "https://files.pythonhosted.org/packages/25/27/10a291d2a68557b66a47d624a6485ae28c0c93fa6d0b836d24009066ceb2/PyAthena-1.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "38c1f6adc30dcd841937b08df35cf514", "sha256": "5fba2502e1c3ea59666e2bbc62114bf8f682a77954cfe294fe9f31712e59a68e" }, "downloads": -1, "filename": "PyAthena-1.1.0.tar.gz", "has_sig": false, "md5_digest": "38c1f6adc30dcd841937b08df35cf514", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13058, "upload_time": "2017-07-29T02:53:08", "url": "https://files.pythonhosted.org/packages/b3/ba/952a55dea307ff96e7dad81c0f90570dec7ae8ea23e78d1f55cb9516bbe5/PyAthena-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "691f990d20e70e83ba332d40f21c9044", "sha256": "b95317e2d08c3a7abd79d802d78ecd2f14e6a38e6bf07f33651dc4fe311f29e1" }, "downloads": -1, "filename": "PyAthena-1.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "691f990d20e70e83ba332d40f21c9044", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21873, "upload_time": "2017-09-24T06:06:56", "url": "https://files.pythonhosted.org/packages/13/75/f1a13926364ce4c5ce25ee1fe466029effb44aadb5372df0d2503b50e526/PyAthena-1.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "526777260729810ca83150a87e02c5f1", "sha256": "537f177eac6b23afb4360e1b96c93baf800723174e967a7658b02118836968d2" }, "downloads": -1, "filename": "PyAthena-1.2.0.tar.gz", "has_sig": false, "md5_digest": "526777260729810ca83150a87e02c5f1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16042, "upload_time": "2017-09-24T06:06:46", "url": "https://files.pythonhosted.org/packages/c7/a7/1128079cd16d2bfe95884328bca4500e28550be92b55e5f9b78c0a3e5dcf/PyAthena-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "aa70c98ce735dbadbe1813be74782aaf", "sha256": "d841a98d80786264c17e836b6793af710326669dc00dbea79f8f586321928f3c" }, "downloads": -1, "filename": "PyAthena-1.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "aa70c98ce735dbadbe1813be74782aaf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21958, "upload_time": "2018-02-10T11:01:20", "url": "https://files.pythonhosted.org/packages/bc/1d/5b611b20721d4cf2f934a39909681388ebbdd348c7541b68ffc5311c2417/PyAthena-1.2.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d4dcf5b773d41df775e4a94f7560ccc9", "sha256": "9b5b9f84c22352411eedc64dc660aab059f570d571573b0f99c91da7bd1a53c1" }, "downloads": -1, "filename": "PyAthena-1.2.1.tar.gz", "has_sig": false, "md5_digest": "d4dcf5b773d41df775e4a94f7560ccc9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16148, "upload_time": "2018-02-10T11:01:10", "url": "https://files.pythonhosted.org/packages/9e/b9/f75c6b121cc969e3b723a694a6819721534b2e7b72bab12ab603bdc55ff6/PyAthena-1.2.1.tar.gz" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "7441b37d031eed7179fe052ce9c3eb82", "sha256": "ef06e39752b73a90eee0f39fb9cb7341564a1d8d96c4042012e1fc85af00ec41" }, "downloads": -1, "filename": "PyAthena-1.2.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7441b37d031eed7179fe052ce9c3eb82", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 22042, "upload_time": "2018-02-26T14:21:48", "url": "https://files.pythonhosted.org/packages/3d/2c/aee7b11e4462a15fe4b52dedc923c1ae864d3b2b447da7383568de44f8ed/PyAthena-1.2.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9d595e17f31fe72072bae900333a2ee8", "sha256": "fcb0819fc30baa01a37a228442499f377e95bdf89b01ca08355c7cffb71f8abf" }, "downloads": -1, "filename": "PyAthena-1.2.2.tar.gz", "has_sig": false, "md5_digest": "9d595e17f31fe72072bae900333a2ee8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16248, "upload_time": "2018-02-26T14:21:40", "url": "https://files.pythonhosted.org/packages/cc/b2/ca2fcf1f4ecf9a347ccbf6c1a25ff71088bbc688a5c7c577b29162dbab40/PyAthena-1.2.2.tar.gz" } ], "1.2.3": [ { "comment_text": "", "digests": { "md5": "6db1fe0ac2a6469cb7f20fd5ffec4b74", "sha256": "008c205d0fa59f1726cc9e1d52992fde9fb1d38e3b59a79a04eab3b1699f3074" }, "downloads": -1, "filename": "PyAthena-1.2.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "6db1fe0ac2a6469cb7f20fd5ffec4b74", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 22035, "upload_time": "2018-04-21T13:57:43", "url": "https://files.pythonhosted.org/packages/54/27/826e1d2390767178272026edeb16493fda8e7d84634b19ed5d2f47201ad9/PyAthena-1.2.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8c9dec4c646d7872fdcc6ce040a4d878", "sha256": "984be5bef3b5e72467fe441649118d77afdb72fca2f61f21d8effa2048bd39a6" }, "downloads": -1, "filename": "PyAthena-1.2.3.tar.gz", "has_sig": false, "md5_digest": "8c9dec4c646d7872fdcc6ce040a4d878", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16201, "upload_time": "2018-04-21T13:57:31", "url": "https://files.pythonhosted.org/packages/13/29/5a09bc5cd229fa72c9de9d665abd24283e721e25b83da9e65e56f80e00d4/PyAthena-1.2.3.tar.gz" } ], "1.2.4": [ { "comment_text": "", "digests": { "md5": "7387a6a055fe25342633912b52d8abe9", "sha256": "60e12798a5eb17c672424a26cc0c84380cd48416f18bd5d6e9e8115198c805cf" }, "downloads": -1, "filename": "PyAthena-1.2.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7387a6a055fe25342633912b52d8abe9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 28587, "upload_time": "2018-05-22T06:38:54", "url": "https://files.pythonhosted.org/packages/32/1e/48c54095df86856721678c0631236a5be3c789ddc9f48eb4f554ff9bc65f/PyAthena-1.2.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ec81dffef9d2ab53d786dd999564d0f8", "sha256": "0b1fdbbc62a3c493530ad5d37e2605a2605799288d4d7a64418434abb5b130c3" }, "downloads": -1, "filename": "PyAthena-1.2.4.tar.gz", "has_sig": false, "md5_digest": "ec81dffef9d2ab53d786dd999564d0f8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23144, "upload_time": "2018-05-22T06:38:45", "url": "https://files.pythonhosted.org/packages/45/87/b2878ae2f3f5b3ca0b3d6ee706561d6f883cce80bad03affb80328606e86/PyAthena-1.2.4.tar.gz" } ], "1.2.5": [ { "comment_text": "", "digests": { "md5": "b79f0b2d7b34ada08e8f4aae8d7144ee", "sha256": "a4651f5b7ebe340444ef3e7fbc03764fe72e5b8c11bfe99517976d14334be059" }, "downloads": -1, "filename": "PyAthena-1.2.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b79f0b2d7b34ada08e8f4aae8d7144ee", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 28947, "upload_time": "2018-05-31T05:15:30", "url": "https://files.pythonhosted.org/packages/f9/de/981b08946f242a0b80e8b3ac9090b94f5e6841b2a0ae49ff8135a2c430a7/PyAthena-1.2.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7239b234fa01ceb14e843c9c5fb80b0a", "sha256": "ca33b54d56994ef9d30529d05330abeae5d5cfe347f46b7d8d988fb088846024" }, "downloads": -1, "filename": "PyAthena-1.2.5.tar.gz", "has_sig": false, "md5_digest": "7239b234fa01ceb14e843c9c5fb80b0a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22815, "upload_time": "2018-05-31T05:15:07", "url": "https://files.pythonhosted.org/packages/ba/79/86de0dd6a48c95badacf406af6d753a0bfdecaaca2bec80870e11c50a1b3/PyAthena-1.2.5.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "3c710f66c4eac15de3a608b33f3d98f3", "sha256": "953e376adcf85e658a5f3b18cb4576c2cc081e8318a76394e98bf91816c2e44f" }, "downloads": -1, "filename": "PyAthena-1.3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3c710f66c4eac15de3a608b33f3d98f3", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 28947, "upload_time": "2018-07-21T13:16:52", "url": "https://files.pythonhosted.org/packages/26/97/a7fc04da461fb2f4b1cb5b886bbdfa38adc11f53218beb39d7c4564e5e0e/PyAthena-1.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "36564450435e6d7bccc093add705bac5", "sha256": "0d073a87c0b45e2f6b1c68d59c0a734c96b56f79b7651c3b294146dec8340ef2" }, "downloads": -1, "filename": "PyAthena-1.3.0.tar.gz", "has_sig": false, "md5_digest": "36564450435e6d7bccc093add705bac5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22788, "upload_time": "2018-07-21T13:16:34", "url": "https://files.pythonhosted.org/packages/ff/54/ed03c25f4b4c9783382a42d42b488d24a02622413efe68115393e58ab691/PyAthena-1.3.0.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "c45b3b6a7d5c2bdf9ca272842b37b502", "sha256": "5e6f308c6978bf1761b407c10852194554d231306d4132c99e466f52366dd8d1" }, "downloads": -1, "filename": "PyAthena-1.4.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "c45b3b6a7d5c2bdf9ca272842b37b502", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 47626, "upload_time": "2018-09-25T13:08:49", "url": "https://files.pythonhosted.org/packages/ba/de/46287babdcd77877199cef98a1065ac9734723326de4dfd9f96fea8d9213/PyAthena-1.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c112324145fb5530d7f8cb9af82b8262", "sha256": "255c149a5bf7248c9d37e57c3f43f5b8ee6077a08c57a91f32a59dd0df95adaa" }, "downloads": -1, "filename": "PyAthena-1.4.0.tar.gz", "has_sig": false, "md5_digest": "c112324145fb5530d7f8cb9af82b8262", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35533, "upload_time": "2018-09-25T13:09:00", "url": "https://files.pythonhosted.org/packages/a3/d7/972d3b51eed3fc9aa2fba6820df57edfd35c7db4f9ed418fc4a8d8625404/PyAthena-1.4.0.tar.gz" } ], "1.4.1": [ { "comment_text": "", "digests": { "md5": "948b85778e5b795e4353b44f0428dbcf", "sha256": "10805f47b241b42844963a4f379a1457be9e0aea0394fbe47d9b8c5742bfdd3c" }, "downloads": -1, "filename": "PyAthena-1.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "948b85778e5b795e4353b44f0428dbcf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 47633, "upload_time": "2018-09-25T13:41:31", "url": "https://files.pythonhosted.org/packages/ca/c1/2c5a987beca4515e548fb356305eca17f6721ac704e3e89ac678032ea28a/PyAthena-1.4.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b777e5ae52e31d2bc70f5d55d0502b0c", "sha256": "e2c5461abb91116c8761d44ecda82787453e154f47e378a1794eef2a6bd49f00" }, "downloads": -1, "filename": "PyAthena-1.4.1.tar.gz", "has_sig": false, "md5_digest": "b777e5ae52e31d2bc70f5d55d0502b0c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35540, "upload_time": "2018-09-25T13:41:40", "url": "https://files.pythonhosted.org/packages/d4/a6/69b1525c4ed916793098741271a2f67c608802d6e2316463f7a5e29cf95f/PyAthena-1.4.1.tar.gz" } ], "1.4.2": [ { "comment_text": "", "digests": { "md5": "8306a94d503068df6f48b9251a97d2c2", "sha256": "fabed2b8ea1a52076a151a8cf1f1f41573ae493396e5dacb49ba726084fb8ded" }, "downloads": -1, "filename": "PyAthena-1.4.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8306a94d503068df6f48b9251a97d2c2", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 47638, "upload_time": "2018-10-06T12:39:01", "url": "https://files.pythonhosted.org/packages/eb/0e/20f8adb8812b7f559448ef08cfd4042309536ec78a189e1a96e47145da7f/PyAthena-1.4.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e7342856c277063f5c84aa54a759fbfb", "sha256": "2588f187b2652c7afc537f5c7d1dbd0fcf9f87ef1c953c2489c828ce301bb0a8" }, "downloads": -1, "filename": "PyAthena-1.4.2.tar.gz", "has_sig": false, "md5_digest": "e7342856c277063f5c84aa54a759fbfb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35549, "upload_time": "2018-10-06T12:39:10", "url": "https://files.pythonhosted.org/packages/a3/06/bb8977c96a419e3a465227c2c1573645f6f431c105596e2ede03584ef583/PyAthena-1.4.2.tar.gz" } ], "1.4.3": [ { "comment_text": "", "digests": { "md5": "86efb25e7da9938d54811aa5bd305cc7", "sha256": "57fb6d182aae06ccdc01aa8a752aefab634fa15fac86e93074cefa4ead4e899b" }, "downloads": -1, "filename": "PyAthena-1.4.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "86efb25e7da9938d54811aa5bd305cc7", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 48881, "upload_time": "2018-12-01T06:32:55", "url": "https://files.pythonhosted.org/packages/5a/0f/d520cc3834a01bf04823389def39d36282a8f4acac3c67d10f26e0153465/PyAthena-1.4.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "967cef414f0ce05b961cb84f02d24173", "sha256": "01d4aec13c32d1956c6c2ae0c7ff813d10bbcc68190094aff0a6c400d9e071f5" }, "downloads": -1, "filename": "PyAthena-1.4.3.tar.gz", "has_sig": false, "md5_digest": "967cef414f0ce05b961cb84f02d24173", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36795, "upload_time": "2018-12-01T06:32:47", "url": "https://files.pythonhosted.org/packages/71/32/334e909a88529f2fe04c69654859ea1ff2a35edff15569b02aec1621cdb0/PyAthena-1.4.3.tar.gz" } ], "1.4.4": [ { "comment_text": "", "digests": { "md5": "750f523f114467ec2159c0e8e199f5dc", "sha256": "c63209faaca18798c4d1b42927fe7f36ba70ab1a4e8204137e22cf873a9a06a3" }, "downloads": -1, "filename": "PyAthena-1.4.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "750f523f114467ec2159c0e8e199f5dc", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 49248, "upload_time": "2018-12-22T04:10:06", "url": "https://files.pythonhosted.org/packages/f5/39/4a943688da63b5ab038a5e7e56d93941a2cd4abdc9017f9d0ddae6a48c83/PyAthena-1.4.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a75033163e66695cb8b8eeb0cf92b39f", "sha256": "a1cc772ace24ef76696404ae993de3ead4809f2d6084914e270348c71240a267" }, "downloads": -1, "filename": "PyAthena-1.4.4.tar.gz", "has_sig": false, "md5_digest": "a75033163e66695cb8b8eeb0cf92b39f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37079, "upload_time": "2018-12-22T04:09:58", "url": "https://files.pythonhosted.org/packages/08/f4/e27093dac0a49c21ed7a12d4b8db3d872aebaef812e3815352815c6fc1bc/PyAthena-1.4.4.tar.gz" } ], "1.4.5": [ { "comment_text": "", "digests": { "md5": "1bf703c2551f8d76e140253eec179b35", "sha256": "89693ac5e326ed4836443c255d235e6c9fde52cbe57676cc1af413eb27a5651b" }, "downloads": -1, "filename": "PyAthena-1.4.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "1bf703c2551f8d76e140253eec179b35", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 49248, "upload_time": "2019-02-09T14:42:10", "url": "https://files.pythonhosted.org/packages/28/54/20ef53db693152ad240218d961f55799ce05b04ef8b31d65075492b9d57b/PyAthena-1.4.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6da103c0117c797160b1697f23bdfce7", "sha256": "f8774bd24da09f895092ef7a2e221abaf7cf7e022834282188672eb566c15fdf" }, "downloads": -1, "filename": "PyAthena-1.4.5.tar.gz", "has_sig": false, "md5_digest": "6da103c0117c797160b1697f23bdfce7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37141, "upload_time": "2019-02-09T14:41:59", "url": "https://files.pythonhosted.org/packages/6c/cc/b8d5cecf1e75ce44f8bfc22aba15a374e9974b2b53952faf021b778b0996/PyAthena-1.4.5.tar.gz" } ], "1.4.6": [ { "comment_text": "", "digests": { "md5": "43575f7c79df1e72f9e3465e2ae89622", "sha256": "aed74559781ae73103f9f6b1ad9c3576f020867c83354d0fa06c0e05c58dc59e" }, "downloads": -1, "filename": "PyAthena-1.4.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "43575f7c79df1e72f9e3465e2ae89622", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 49424, "upload_time": "2019-02-11T00:48:39", "url": "https://files.pythonhosted.org/packages/c5/ff/e20073f4be9592f2daf9c3f06e7e560221bfec4c9cbb06b1eeb6266da6f4/PyAthena-1.4.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6ef282ec0c08a627ab2eabed748eff26", "sha256": "1f0835e2ee87fbb2d20c6c32e750758cc57121f93d06450702ecf66d1f8d452c" }, "downloads": -1, "filename": "PyAthena-1.4.6.tar.gz", "has_sig": false, "md5_digest": "6ef282ec0c08a627ab2eabed748eff26", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37362, "upload_time": "2019-02-11T00:48:32", "url": "https://files.pythonhosted.org/packages/f9/0e/76e199b7892f2ba10ae9ebf44e9ed0809237328cc5059e056336ca5ce675/PyAthena-1.4.6.tar.gz" } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "107e648070eaf694b52813e4d9305339", "sha256": "a476b72f50909b836f36f174c06698c8327c4c2eebef6520ea6f26bf23654f9e" }, "downloads": -1, "filename": "PyAthena-1.5.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "107e648070eaf694b52813e4d9305339", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 49551, "upload_time": "2019-03-05T15:06:28", "url": "https://files.pythonhosted.org/packages/30/f4/16efe487ee1a6a155577a1c1a4691505dc762f6ad5d7f0b2631fc43b1580/PyAthena-1.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "378d21edadffdb6d049e056bef26fb81", "sha256": "b38b529352a81e712c7944f3697c0ce6bc43af9cf86db091dc748ba41a9ee1b1" }, "downloads": -1, "filename": "PyAthena-1.5.0.tar.gz", "has_sig": false, "md5_digest": "378d21edadffdb6d049e056bef26fb81", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37694, "upload_time": "2019-03-05T15:06:16", "url": "https://files.pythonhosted.org/packages/0e/b8/4874c6aa1e928da6c6f44edd0dfc5481a5e9be7f1e878c5ffa04bfb29a76/PyAthena-1.5.0.tar.gz" } ], "1.5.1": [ { "comment_text": "", "digests": { "md5": "e5b9b489f2e79318042cff792ccdc97a", "sha256": "0fba7522bad16515b21b9749fb4b478e3de61d701750829714db94500b90f1da" }, "downloads": -1, "filename": "PyAthena-1.5.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e5b9b489f2e79318042cff792ccdc97a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 49577, "upload_time": "2019-03-23T04:50:13", "url": "https://files.pythonhosted.org/packages/1c/35/4020e5b88ecf506a1aff4893e6d4fdb879ebd522422f8d9fd6a70ffdb546/PyAthena-1.5.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ad02eba4e57a45532df6acfcebf76429", "sha256": "4ae53ce27ee14187b59bf4e4908c147b72337b21e8aa010ee9330aec75cc18b8" }, "downloads": -1, "filename": "PyAthena-1.5.1.tar.gz", "has_sig": false, "md5_digest": "ad02eba4e57a45532df6acfcebf76429", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37760, "upload_time": "2019-03-23T04:50:05", "url": "https://files.pythonhosted.org/packages/24/ea/7fa3d2937924773629f928baa42f79a6f2e420217fd9b3c016ea2768fb3f/PyAthena-1.5.1.tar.gz" } ], "1.6.0": [ { "comment_text": "", "digests": { "md5": "dab349309a97e76f7c0825d47a0b1388", "sha256": "b092aba13fdabce531545f09c6325bb00556ad25ac0cc67a9982c87f6f3946a3" }, "downloads": -1, "filename": "PyAthena-1.6.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "dab349309a97e76f7c0825d47a0b1388", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 50417, "upload_time": "2019-04-14T06:51:25", "url": "https://files.pythonhosted.org/packages/53/43/b2aa4124661736134de236d0f3772a49cee54f7822d58c8d90d6dbff24b3/PyAthena-1.6.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c73b96b1666a1cf793b43ab9690431b3", "sha256": "d99f738b9c853dd74b3f080ac88b09ceb455169f7be6a8adbc9e514759b89895" }, "downloads": -1, "filename": "PyAthena-1.6.0.tar.gz", "has_sig": false, "md5_digest": "c73b96b1666a1cf793b43ab9690431b3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37737, "upload_time": "2019-04-14T06:51:17", "url": "https://files.pythonhosted.org/packages/4b/6b/05925ecb0453c078b46f68c956a928c1e520d7fcfb946331239b83fdbd0e/PyAthena-1.6.0.tar.gz" } ], "1.6.1": [ { "comment_text": "", "digests": { "md5": "48f896437dc13ae215072993b4f3e999", "sha256": "5321ce88ea6decfcbfb5b4d195ffaf46a0a24e13e195132a8d99bdcb55d7d61a" }, "downloads": -1, "filename": "PyAthena-1.6.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "48f896437dc13ae215072993b4f3e999", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 50457, "upload_time": "2019-04-15T14:45:18", "url": "https://files.pythonhosted.org/packages/32/b6/841b79b42dad6044429596bfed6f669131b59328fa630171538d85adffbe/PyAthena-1.6.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2675a353b0254eec3e6836eec7c9d99f", "sha256": "280c3268ef8ae13f607d62b7ee0740feecf7de7ae8898d2be72add80762da188" }, "downloads": -1, "filename": "PyAthena-1.6.1.tar.gz", "has_sig": false, "md5_digest": "2675a353b0254eec3e6836eec7c9d99f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 37814, "upload_time": "2019-04-15T14:45:11", "url": "https://files.pythonhosted.org/packages/41/63/72653bcdc7481d3b19282474785ff5e00d73542a22c8c5aece4788239b6d/PyAthena-1.6.1.tar.gz" } ], "1.7.0": [ { "comment_text": "", "digests": { "md5": "442988df338a7a6edf91ff118db0297e", "sha256": "db800335432949812ff2e0c64223c60bc954eb784935f340540ac83ca6af0614" }, "downloads": -1, "filename": "PyAthena-1.7.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "442988df338a7a6edf91ff118db0297e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 53738, "upload_time": "2019-06-16T09:38:42", "url": "https://files.pythonhosted.org/packages/47/67/dd01e9d509021b0a407f44eed154e411c02030563cc8685776cb6408f9f2/PyAthena-1.7.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "51caceabe313de32224abb946e921cf1", "sha256": "07cf547e1cadd3907c67dbe31ab666f5d363737fc25c119d76399f5ac5f4f6a6" }, "downloads": -1, "filename": "PyAthena-1.7.0.tar.gz", "has_sig": false, "md5_digest": "51caceabe313de32224abb946e921cf1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 39443, "upload_time": "2019-06-16T09:38:33", "url": "https://files.pythonhosted.org/packages/f3/ad/4e0bd793d60935b5ed55dcbc4a031d34fcf722e96294cf9ccb8a01450fe3/PyAthena-1.7.0.tar.gz" } ], "1.7.1": [ { "comment_text": "", "digests": { "md5": "ce2b6a90130db8b74925305492218b61", "sha256": "a3472210cc94056e34125fdb59e44511892c7bc128b249a7c4e66c684a46d713" }, "downloads": -1, "filename": "PyAthena-1.7.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ce2b6a90130db8b74925305492218b61", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 38477, "upload_time": "2019-06-30T05:25:07", "url": "https://files.pythonhosted.org/packages/34/11/20fbc9d9c0825e3c1c7ef9ea7e6489b20f582a24ca05ab023003948034cf/PyAthena-1.7.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7b10294733075b1340f2d32256891bf3", "sha256": "47f642bdcf9009a43bdc0b2d32e85ed4b7dcecbddf1d2de34f116c03ef37c309" }, "downloads": -1, "filename": "PyAthena-1.7.1.tar.gz", "has_sig": false, "md5_digest": "7b10294733075b1340f2d32256891bf3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33218, "upload_time": "2019-06-30T05:24:58", "url": "https://files.pythonhosted.org/packages/56/39/6d32de8dd9d705c845fbb761843ee91ed95508fdfa558db0923016cc628c/PyAthena-1.7.1.tar.gz" } ], "1.7.2": [ { "comment_text": "", "digests": { "md5": "ddeca4a533e4a83bd5577bfc5bc3ecf6", "sha256": "ad306b282b03221dfe17b589fc6c27f6afa74a8266786f064e3d84a4c4858e2f" }, "downloads": -1, "filename": "PyAthena-1.7.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ddeca4a533e4a83bd5577bfc5bc3ecf6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 38539, "upload_time": "2019-10-03T12:41:24", "url": "https://files.pythonhosted.org/packages/ad/fe/3638a0ea41c4a3684fc222b6421a5241dd8a461e2731637b88a9166cccf8/PyAthena-1.7.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0ad8e388e01bfb4b4f6e1ce71d87d1ee", "sha256": "b0a30a3d4ba276d2d3e2565a9e38205caa0dcd3a211e5df09f3b92086144c0f4" }, "downloads": -1, "filename": "PyAthena-1.7.2.tar.gz", "has_sig": false, "md5_digest": "0ad8e388e01bfb4b4f6e1ce71d87d1ee", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33286, "upload_time": "2019-10-03T12:41:34", "url": "https://files.pythonhosted.org/packages/df/e8/bed65bd8c46fdb31d7645e09100e49843da62f8c97b01c81f4844155c145/PyAthena-1.7.2.tar.gz" } ], "1.8.0": [ { "comment_text": "", "digests": { "md5": "d801c6cb8ebe2b505328653f9950787a", "sha256": "c96981dc29dc1624cd33f8247768075fcc4378521ed8a7d18609f72adf0bd29a" }, "downloads": -1, "filename": "PyAthena-1.8.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d801c6cb8ebe2b505328653f9950787a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 39815, "upload_time": "2019-10-13T23:05:07", "url": "https://files.pythonhosted.org/packages/f0/8d/660aa0a423bcdf30ff2cb41326ed2b3806e6f83d0c9f1d6e346386de5771/PyAthena-1.8.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d31a215f1336cc0c3fd87c785c762058", "sha256": "47fe59434fae61cef66ec1fb60c2c9f53f9c5b94109fdb3b4ad5fd661e1ce957" }, "downloads": -1, "filename": "PyAthena-1.8.0.tar.gz", "has_sig": false, "md5_digest": "d31a215f1336cc0c3fd87c785c762058", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34941, "upload_time": "2019-10-13T23:04:59", "url": "https://files.pythonhosted.org/packages/c4/39/b0a7cbbbf42e0a1c83b4dc7bc4afcd7bd2e8b40459834a71bd2317e1925c/PyAthena-1.8.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d801c6cb8ebe2b505328653f9950787a", "sha256": "c96981dc29dc1624cd33f8247768075fcc4378521ed8a7d18609f72adf0bd29a" }, "downloads": -1, "filename": "PyAthena-1.8.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "d801c6cb8ebe2b505328653f9950787a", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 39815, "upload_time": "2019-10-13T23:05:07", "url": "https://files.pythonhosted.org/packages/f0/8d/660aa0a423bcdf30ff2cb41326ed2b3806e6f83d0c9f1d6e346386de5771/PyAthena-1.8.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d31a215f1336cc0c3fd87c785c762058", "sha256": "47fe59434fae61cef66ec1fb60c2c9f53f9c5b94109fdb3b4ad5fd661e1ce957" }, "downloads": -1, "filename": "PyAthena-1.8.0.tar.gz", "has_sig": false, "md5_digest": "d31a215f1336cc0c3fd87c785c762058", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34941, "upload_time": "2019-10-13T23:04:59", "url": "https://files.pythonhosted.org/packages/c4/39/b0a7cbbbf42e0a1c83b4dc7bc4afcd7bd2e8b40459834a71bd2317e1925c/PyAthena-1.8.0.tar.gz" } ] }