aiomysql is a library for accessing a MySQL database from the asyncio

Overview

aiomysql

https://travis-ci.com/aio-libs/aiomysql.svg?branch=master Code coverage Latest Version Documentation Status Chat on Gitter

aiomysql is a "driver" for accessing a MySQL database from the asyncio (PEP-3156/tulip) framework. It depends on and reuses most parts of PyMySQL . aiomysql tries to be like awesome aiopg library and preserve same api, look and feel.

Internally aiomysql is copy of PyMySQL, underlying io calls switched to async, basically yield from and asyncio.coroutine added in proper places)). sqlalchemy support ported from aiopg.

Documentation

https://aiomysql.readthedocs.io/

Mailing List

https://groups.google.com/forum/#!forum/aio-libs

Basic Example

aiomysql based on PyMySQL , and provides same api, you just need to use await conn.f() or yield from conn.f() instead of calling conn.f() for every method.

Properties are unchanged, so conn.prop is correct as well as conn.prop = val.

import asyncio
import aiomysql


async def test_example(loop):
    pool = await aiomysql.create_pool(host='127.0.0.1', port=3306,
                                      user='root', password='',
                                      db='mysql', loop=loop)
    async with pool.acquire() as conn:
        async with conn.cursor() as cur:
            await cur.execute("SELECT 42;")
            print(cur.description)
            (r,) = await cur.fetchone()
            assert r == 42
    pool.close()
    await pool.wait_closed()


loop = asyncio.get_event_loop()
loop.run_until_complete(test_example(loop))

Example of SQLAlchemy optional integration

Sqlalchemy support has been ported from aiopg so api should be very familiar for aiopg user.:

import asyncio
import sqlalchemy as sa

from aiomysql.sa import create_engine


metadata = sa.MetaData()

tbl = sa.Table('tbl', metadata,
               sa.Column('id', sa.Integer, primary_key=True),
               sa.Column('val', sa.String(255)))


async def go(loop):
    engine = await create_engine(user='root', db='test_pymysql',
                                 host='127.0.0.1', password='', loop=loop)
    async with engine.acquire() as conn:
        await conn.execute(tbl.insert().values(val='abc'))
        await conn.execute(tbl.insert().values(val='xyz'))

        async for row in conn.execute(tbl.select()):
            print(row.id, row.val)

    engine.close()
    await engine.wait_closed()


loop = asyncio.get_event_loop()
loop.run_until_complete(go(loop))

Requirements

Comments
  • SSL Support (plus mysql_clear_password plugin for RDS)

    SSL Support (plus mysql_clear_password plugin for RDS)

    OK, I apologise up front, I only realised after doing this there was another SSL branch. Also sorry about the nasty diff.

    What I essentially did was move most of the protocol stuff to MySQLProtocol and then used the same logic as here to perform the switch to SSL which happens just after the initial handshake.

    I'm pretty sure there's stuff that'll need to be changed but on my PC at least all the tests pass ;-), and I'm also able to connect to RDS using a generated token from boto3 over SSL using the mysql_clear_password auth plugin so SSL works at least.

    I think we'll need to probably generate some certs and apply them to MySQL, shouldn't be too difficult.

    Apart from adding SSL tests, is there anything else that needs doing.

    opened by terrycain 43
  • PyPi releases do not always match repo code

    PyPi releases do not always match repo code

    While trying to work out why installing 0.0.17 still triggered the issue outlined in #302, I started looking at other versions and discovered that a few of them don't appear to match the code tagged for that release in this repo.

    I've done a rudimentary check on the last 5 versions by doing a very lazy test, just checking if the version of pymysql matches between the git tag and the pypi release, here are the results:

    0.0.15: match

    $ docker container run -it --rm python pip install aiomysql==0.0.15 | grep -F 'Collecting PyMySQL'                                                                                                                 
    Collecting PyMySQL>=0.7.5 (from aiomysql==0.0.15)
    

    0.0.16: doesn't match

    $ docker container run -it --rm python pip install aiomysql==0.0.16 | grep -F 'Collecting PyMySQL'
    Collecting PyMySQL<0.9,>=0.7.5 (from aiomysql==0.0.16)
    

    0.0.17: doesn't match

    $ docker container run -it --rm python pip install aiomysql==0.0.17 | grep -F 'Collecting PyMySQL'
    Collecting PyMySQL<=0.9.2,>=0.9 (from aiomysql==0.0.17)
    

    0.0.18: no release

    $ docker container run -it --rm python pip install aiomysql==0.0.18 | grep -F 'Collecting PyMySQL'
    err: No matching distribution found for aiomysql==0.0.18
    

    0.0.19: match

    $ docker container run -it --rm python pip install aiomysql==0.0.19 | grep -F 'Collecting PyMySQL'
    Collecting PyMySQL<=0.9.2,>=0.9 (from aiomysql==0.0.19)
    

    At best this is awfully confusing because according to the code 0.0.17 was the first release to have the conservative version pinning for pymysql, but in fact that's some how made it into the 0.0.16 release (which the code doesn't reflect) but not into 0.0.17.

    It's a little unsettling to find that the versions released in PyPi don't always match the tagged code releases. Is this some sort of mistake or quirk in the shipping process? ๐Ÿ˜•

    Possibly related: https://github.com/aio-libs/aiomysql/issues/318

    opened by mal 36
  • SSL Support (plus mysql_clear_password plugin for RDS)

    SSL Support (plus mysql_clear_password plugin for RDS)

    Git closed last one when i force pushed.

    Long discussion in #225

    @jettify @terrisgit - new PR, less code :D

    Also credit to Alex as I made a test where MySQL then tried to renegotiate the auth plugin, so I imported his process_auth function (and github realises it was him :smile:)

    @jettify whats next.

    opened by terrycain 19
  • SSCursor can't close while raise Error

    SSCursor can't close while raise Error

    if server send a error to SSCurosr, SSCursor try to call self._result._finish_unbuffered_query in close function

    # SSCursor close funcion in  cursor.py line 604
    if self._result is not None and self._result is conn._result:
        await self._result._finish_unbuffered_query()
    

    but there is not a byte to read after recived a error packge, so the loop is allways waiting in the time, the error could't raise out .

    # _finish_unbuffered_query function in connection.py line 1197  
    while self.unbuffered_active:
        packet = await self.connection._read_packet()
    

    I met the bug after I seted a mysql variable

    SET GLOBAL MAX_EXECUTION_TIME=3000
    

    a SELECT statement will be aborted if it takes more than 3s.

    the connection received a error package with erorno 3024, but the loop is waiting packge to finitshed unbuffered_query

    bug 
    opened by ppd0705 17
  • Bump coverage from 6.3.2 to 6.3.3

    Bump coverage from 6.3.2 to 6.3.3

    Bumps coverage from 6.3.2 to 6.3.3.

    Changelog

    Sourced from coverage's changelog.

    Version 6.3.3 โ€” 2022-05-12

    • Fix: Coverage.py now builds successfully on CPython 3.11 (3.11.0b1) again. Closes issue 1367_. Some results for generators may have changed.

    .. _issue 1367: nedbat/coveragepy#1367

    .. _changes_632:

    Commits
    • 99ab688 docs: latest sample
    • c01fc71 build: prep for 6.3.3
    • ce2d4ec build: don't make wheels for pre-release Pythons
    • a9ecd8a build: add markdown summary to the action
    • 3e6ff4f chore: make upgrade
    • e5b91eb test: skip tests that fail until CPython #92236 is fixed
    • 956f0fd fix: fix compilation errors on latest 3.11.0
    • 9097c0d debug: incidental debug improvements in tracer.c
    • 45ba7e7 build(deps): bump docker/setup-qemu-action from 1 to 2 (#1372)
    • 9ef7d3c build: Set permissions for GitHub actions (#1369)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies python 
    opened by dependabot[bot] 16
  • Query returns result from another query

    Query returns result from another query

    Here is my problem. I use aiomysql in aiohttp handlers. Something like this:

    async def handler(request):
        data = await get_data(request.app['db_pool'])
    
    async def get_data(db_pool):
        # prepare query q and params
        async with db_pool.acquire() as conn:
            async with conn.cursor() as cur:
                await cur.execute(q, params)
                rows = await cur.fetchall()
        # do something with rows
        # and return result
    

    And some times rows are not the result for the given query q but the result from other query. There are no errors. It just silently returns wrong result. The only way i could determine that situation was that queries had different number of fields so there was an index out of bounds error in the log some times.

    So the question is - do i run it in a right way? Or should i use any locks somewhere? Or is it a bug in the library?

    opened by ilex 15
  • Pool auto reconnect

    Pool auto reconnect

    Can we replace the current connection in pool with a new one on error "Lost connection to MySQL server during query ([Errno 104] Connection reset by peer)"?

    opened by offline 14
  • Implement release workflow in GitHub actions

    Implement release workflow in GitHub actions

    What do these changes do?

    • heavily based on @webknjaz's work on https://github.com/cherrypy/cheroot/blob/b2c619f3e60682b9405a87cea48e8d30801b6048/.github/workflows/ci-cd.yml
    • create package before running tests, run tests against same package that will be published
    • run nightly tests
    • publish package to test pypi for commits to master
    • publish package to pypi using workflow_dispatch
    • create github tag and release after successful tests on workflow_dispatch

    Are there changes in behavior for the user?

    no

    Related issue number

    fixes #322

    Checklist

    • [x] I think the code is well written
    • [ ] Unit tests for the changes exist
    • [ ] Documentation reflects the changes
    • [x] Add a new news fragment to CHANGES.txt
    enhancement 
    opened by Nothing4You 12
  • MySQL 8 Compatibility and SHA256 authentication plugin support

    MySQL 8 Compatibility and SHA256 authentication plugin support

    Fixes #302 Fixes #297

    This PR contains the bulk of what PyMySQL 0.9.0 added which was support for MySQL 8+'s use of the sha256_password and caching_sha2_password authentication plugin.

    I've also parameterised mysql_tag so it now tests connecting to MySQL 5.6 and 8.0 using SSL and as MySQL 8 defaults to the caching_sha2_password, that is tested by the current SSL unit tests.

    I'm planning on creating a fixture that allows me to skip tests depending on the value of mysql_tag so I can target a few specific tests to 8.0 which should further test the sha256_password plugin.


    @jettify I'm assuming you have no issue with me making a PR to move the other tests to using the MySQL server provided by the container, that way I think we can get rid of all the travis matrix except PYTHONASYNCIODEBUG.

    In the top of conftest.py were checking for version 3.5 and optionally enabling uvloop, seeing as we've dropped less than 3.5.3 support that can go.

    enhancement 
    opened by terrycain 12
  • Fix  aiomysql.sa in Python 3.7 and run tests for python 3.7 in CI

    Fix aiomysql.sa in Python 3.7 and run tests for python 3.7 in CI

    What do these changes do?

    Fix async iterator protocol in aiomysql.utils._SAConnectionContextManager, and run tests for python 3.7 in CI.

    1. Add __aiter__ and __anext__ methods for _SAConnectionContextManager
    2. Update .travis.yml for Python 3.7

    Are there changes in behavior for the user?

    No changes.

    Related issue number

    #410

    Checklist

    • [x] I think the code is well written
    • [x] Unit tests for the changes exist
    • [ ] Documentation reflects the changes
    • [ ] Add a new news fragment into the CHANGES folder
      • name it <issue_id>.<type> (e.g. 588.bugfix)
      • if you don't have an issue_id change it to the pr id after creating the PR
      • ensure type is one of the following:
        • .feature: Signifying a new feature.
        • .bugfix: Signifying a bug fix.
        • .doc: Signifying a documentation improvement.
        • .removal: Signifying a deprecation or removal of public API.
        • .misc: A ticket has been closed, but it is not of interest to users.
      • Make sure to use full sentences with correct case and punctuation, for example: Fix issue with non-ascii contents in doctest text files.
    opened by khuencheng 11
  • Compatibility with PyMySQL == 0.9.0

    Compatibility with PyMySQL == 0.9.0

    PyMySQL has been updated to 0.9.0 and has some incompatible changes. Namely, I get error:

    lib/python3.6/site-packages/aiomysql/__init__.py:32: in <module>
        from .connection import Connection, connect
    lib/python3.6/site-packages/aiomysql/connection.py:30: in <module>
        from pymysql.connections import _scramble
    ImportError: cannot import name '_scramble'
    
    opened by LilyMaster 11
  • Bump coverage from 6.5.0 to 7.0.2

    Bump coverage from 6.5.0 to 7.0.2

    Bumps coverage from 6.5.0 to 7.0.2.

    Changelog

    Sourced from coverage's changelog.

    Version 7.0.2 โ€” 2023-01-02

    • Fix: when using the [run] relative_files = True setting, a relative [paths] pattern was still being made absolute. This is now fixed, closing issue 1519_.

    • Fix: if Python doesn't provide tomllib, then TOML configuration files can only be read if coverage.py is installed with the [toml] extra. Coverage.py will raise an error if TOML support is not installed when it sees your settings are in a .toml file. But it didn't understand that [tools.coverage] was a valid section header, so the error wasn't reported if you used that header, and settings were silently ignored. This is now fixed, closing issue 1516_.

    • Fix: adjusted how decorators are traced on PyPy 7.3.10, fixing issue 1515_.

    • Fix: the coverage lcov report did not properly implement the --fail-under=MIN option. This has been fixed.

    • Refactor: added many type annotations, including a number of refactorings. This should not affect outward behavior, but they were a bit invasive in some places, so keep your eyes peeled for oddities.

    • Refactor: removed the vestigial and long untested support for Jython and IronPython.

    .. _issue 1515: nedbat/coveragepy#1515 .. _issue 1516: nedbat/coveragepy#1516 .. _issue 1519: nedbat/coveragepy#1519

    .. _changes_7-0-1:

    Version 7.0.1 โ€” 2022-12-23

    • When checking if a file mapping resolved to a file that exists, we weren't considering files in .whl files. This is now fixed, closing issue 1511_.

    • File pattern rules were too strict, forbidding plus signs and curly braces in directory and file names. This is now fixed, closing issue 1513_.

    • Unusual Unicode or control characters in source files could prevent reporting. This is now fixed, closing issue 1512_.

    • The PyPy wheel now installs on PyPy 3.7, 3.8, and 3.9, closing issue 1510_.

    .. _issue 1510: nedbat/coveragepy#1510 .. _issue 1511: nedbat/coveragepy#1511

    ... (truncated)

    Commits
    • 2f731e2 docs: sample HTML
    • dbbd5b7 docs: prep for 7.0.2
    • d08e6d0 fix: relative_files should keep relative path maps. #1519
    • 3f0bce2 mypy: partial debug.py and pytracer.py
    • ffc701a mypy: test_xml.py
    • 5580cf8 mypy: xmlreport.py
    • 0c9b5e0 mypy: check collector.py and plugin_support.py
    • 8f4d404 refactor: a better way to filter coverage debug pybehave
    • a3f3841 mypy: add cmdline.py and test_cmdline.py
    • 09f9188 mypy: add env.py
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies python 
    opened by dependabot[bot] 1
  • Update sphinx requirement from <5.1.2,>=1.8.1 to >=1.8.1,<6.0.1

    Update sphinx requirement from <5.1.2,>=1.8.1 to >=1.8.1,<6.0.1

    Updates the requirements on sphinx to permit the latest version.

    Release notes

    Sourced from sphinx's releases.

    v6.0.0

    Changelog: https://www.sphinx-doc.org/en/master/changes.html

    Changelog

    Sourced from sphinx's changelog.

    Release 6.0.0 (released Dec 29, 2022)

    Dependencies

    • #10468: Drop Python 3.6 support
    • #10470: Drop Python 3.7, Docutils 0.14, Docutils 0.15, Docutils 0.16, and Docutils 0.17 support. Patch by Adam Turner

    Incompatible changes

    • #7405: Removed the jQuery and underscore.js JavaScript frameworks.

      These frameworks are no longer be automatically injected into themes from Sphinx 6.0. If you develop a theme or extension that uses the jQuery, $, or $u global objects, you need to update your JavaScript to modern standards, or use the mitigation below.

      The first option is to use the sphinxcontrib.jquery_ extension, which has been developed by the Sphinx team and contributors. To use this, add sphinxcontrib.jquery to the extensions list in conf.py, or call app.setup_extension("sphinxcontrib.jquery") if you develop a Sphinx theme or extension.

      The second option is to manually ensure that the frameworks are present. To re-add jQuery and underscore.js, you will need to copy jquery.js and underscore.js from the Sphinx repository_ to your static directory, and add the following to your layout.html:

      .. code-block:: html+jinja

      {%- block scripts %} {{ super() }} {%- endblock %}

      .. _sphinxcontrib.jquery: https://github.com/sphinx-contrib/jquery/

      Patch by Adam Turner.

    • #10471, #10565: Removed deprecated APIs scheduled for removal in Sphinx 6.0. See :ref:dev-deprecated-apis for details. Patch by Adam Turner.

    • #10901: C Domain: Remove support for parsing pre-v3 style type directives and roles. Also remove associated configuration variables c_allow_pre_v3 and c_warn_on_allowed_pre_v3. Patch by Adam Turner.

    Features added

    ... (truncated)

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies python 
    opened by dependabot[bot] 1
  • Bump actions/cache from 3.0.11 to 3.2.2

    Bump actions/cache from 3.0.11 to 3.2.2

    Bumps actions/cache from 3.0.11 to 3.2.2.

    Release notes

    Sourced from actions/cache's releases.

    v3.2.2

    What's Changed

    New Contributors

    Full Changelog: https://github.com/actions/cache/compare/v3.2.1...v3.2.2

    v3.2.1

    What's Changed

    Full Changelog: https://github.com/actions/cache/compare/v3.2.0...v3.2.1

    v3.2.0

    What's Changed

    New Contributors

    ... (truncated)

    Changelog

    Sourced from actions/cache's changelog.

    3.0.11

    • Update toolkit version to 3.0.5 to include @actions/core@^1.10.0
    • Update @actions/cache to use updated saveState and setOutput functions from @actions/core@^1.10.0

    3.1.0-beta.1

    • Update @actions/cache on windows to use gnu tar and zstd by default and fallback to bsdtar and zstd if gnu tar is not available. (issue)

    3.1.0-beta.2

    • Added support for fallback to gzip to restore old caches on windows.

    3.1.0-beta.3

    • Bug fixes for bsdtar fallback if gnutar not available and gzip fallback if cache saved using old cache action on windows.

    3.2.0-beta.1

    • Added two new actions - restore and save for granular control on cache.

    3.2.0

    • Released the two new actions - restore and save for granular control on cache

    3.2.1

    • Update @actions/cache on windows to use gnu tar and zstd by default and fallback to bsdtar and zstd if gnu tar is not available. (issue)
    • Added support for fallback to gzip to restore old caches on windows.
    • Added logs for cache version in case of a cache miss.

    3.2.2

    • Reverted the changes made in 3.2.1 to use gnu tar and zstd by default on windows.
    Commits
    • 4723a57 Revert compression changes related to windows but keep version logging (#1049)
    • d1507cc Merge pull request #1042 from me-and/correct-readme-re-windows
    • 3337563 Merge branch 'main' into correct-readme-re-windows
    • 60c7666 save/README.md: Fix typo in example (#1040)
    • b053f2b Fix formatting error in restore/README.md (#1044)
    • 501277c README.md: remove outdated Windows cache tip link
    • c1a5de8 Upgrade codeql to v2 (#1023)
    • 9b0be58 Release compression related changes for windows (#1039)
    • c17f4bf GA for granular cache (#1035)
    • ac25611 docs: fix an invalid link in workarounds.md (#929)
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 1
  • Bump ipdb from 0.13.9 to 0.13.11

    Bump ipdb from 0.13.9 to 0.13.11

    Bumps ipdb from 0.13.9 to 0.13.11.

    Changelog

    Sourced from ipdb's changelog.

    0.13.11 (2022-12-13)

    • Better exception handling when looking for config. [bignose-debian]

    0.13.10 (2022-12-13)

    • Better toml support (use tomlib for 3.11, tomli for 3.6 to 3.10). [salty-horse, mgorny]

    • Minimal PEP 517 support. [cpcloud]

    • 3.11 support for run as module and run as script. [nphilipp, gotcha]

    • Based on OSV:PYSEC-2022-12 change ipython dependencies, for users using python 3.6, install 7.16.3 <= IPython < 7.17.0, for users using python>3.6, install IPython >= 7.31.1. [malkstar]

    Commits
    • dd12f54 Preparing release 0.13.11
    • fcdbb1c upload wheel when releasing
    • 333605e Move a function call outside local exception handling.
    • 43a8d5e Add a test case for get_context_from_config with invalid config.
    • f4f069c Extract helper function to set up config files fixture for test cases.
    • 0c92dda Extract stand-alone helper function write_lines_to_file.
    • 94adee8 Back to development: 0.13.11
    • 87b0d1b Preparing release 0.13.10
    • 99aef23 Tune setup.py
    • 0b45377 Update dependencies
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies python 
    opened by dependabot[bot] 1
  • Bump ncipollo/release-action from 1.11.1 to 1.12.0

    Bump ncipollo/release-action from 1.11.1 to 1.12.0

    Bumps ncipollo/release-action from 1.11.1 to 1.12.0.

    Release notes

    Sourced from ncipollo/release-action's releases.

    v1.12.0

    What's Changed

    New Contributor

    Full Changelog: https://github.com/ncipollo/release-action/compare/v1.11.2...v1.12.0

    v1.11.2

    • Security updates
    • Adds support for skipIfReleaseExists
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 1
  • Bump pypa/gh-action-pypi-publish from 1.5.1 to 1.6.4

    Bump pypa/gh-action-pypi-publish from 1.5.1 to 1.6.4

    Bumps pypa/gh-action-pypi-publish from 1.5.1 to 1.6.4.

    Release notes

    Sourced from pypa/gh-action-pypi-publish's releases.

    v1.6.4

    oh, boi! again?

    This is the last one tonight, promise! It fixes this embarrassing bug that was actually caught by the CI but got overlooked due to the lack of sleep. TL;DR GH passed $HOME from the external env into the container and that tricked the Python's site module to think that the home directory is elsewhere, adding non-existent paths to the env vars. See #115.

    Full Diff: https://github.com/pypa/gh-action-pypi-publish/compare/v1.6.3...v1.6.4

    v1.6.3

    Another Release!? Why?

    In pypa/gh-action-pypi-publish#112, it was discovered that passing a $PATH variable even breaks the shebang. So this version adds more safeguards to make sure it keeps working with a fully broken $PATH.

    Full Diff: https://github.com/pypa/gh-action-pypi-publish/compare/v1.6.2...v1.6.3

    v1.6.2

    What's Fixed

    • Made the $PATH and $PYTHONPATH environment variables resilient to broken values passed from the host runner environment, which previously allowed the users to accidentally break the container's internal runtime as reported in pypa/gh-action-pypi-publish#112

    Internal Maintenance Improvements

    New Contributors

    Full Diff: https://github.com/pypa/gh-action-pypi-publish/compare/v1.6.1...v1.6.2

    v1.6.1

    What's happened?!

    There was a sneaky bug in v1.6.0 which caused Twine to be outside the import path in the Python runtime. It is fixed in v1.6.1 by updating $PYTHONPATH to point to a correct location of the user-global site-packages/ directory.

    Full Diff: https://github.com/pypa/gh-action-pypi-publish/compare/v1.6.0...v1.6.1

    v1.6.0

    Anything's changed?

    The only update is that the Python runtime has been upgraded from 3.9 to 3.11. There are no functional changes in this release.

    Full Changelog: https://github.com/pypa/gh-action-pypi-publish/compare/v1.5.2...v1.6.0

    v1.5.2

    What's Improved

    Full Diff: https://github.com/pypa/gh-action-pypi-publish/compare/v1.5.1...v1.5.2

    Commits
    • c7f29f7 ๐Ÿ› Override $HOME in the container with /root
    • 644926c ๐Ÿงช Always run smoke testing in debug mode
    • e71a4a4 Add support for verbose bash execusion w/ $DEBUG
    • e56e821 ๐Ÿ› Make id always available in twine-upload
    • c879b84 ๐Ÿ› Use full path to bash in shebang
    • 57e7d53 ๐Ÿ›Ensure the default $PATH value is pre-loaded
    • ce291dc ๐ŸŽจ๐Ÿ›Fix the branch @ pre-commit.ci badge links
    • 102d8ab ๐Ÿ› Rehardcode devpi port for GHA srv container
    • 3a9eaef ๐Ÿ›Use different ports in/out of GHA containers
    • a01fa74 ๐Ÿ› Use localhost @ GHA outside the containers
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies github_actions 
    opened by dependabot[bot] 1
Releases(v0.1.1)
  • v0.1.1(May 8, 2022)

    Changes

    0.1.1 (2022-05-08) ^^^^^^^^^^^^^^^^^^

    • Fix SSL connection handshake charset not respecting client configuration #776

    0.1.0 (2022-04-11) ^^^^^^^^^^^^^^^^^^

    • Don't send sys.argv[0] as program_name to MySQL server by default #620

    • Allow running process as anonymous uid #587

    • Fix timed out MySQL 8.0 connections raising InternalError rather than OperationalError #660

    • Fix timed out MySQL 8.0 connections being returned from Pool #660

    • Ensure connections are properly closed before raising an OperationalError when the server connection is lost #660

    • Ensure connections are properly closed before raising an InternalError when packet sequence numbers are out of sync #660

    • Unix sockets are now internally considered secure, allowing sha256_password and caching_sha2_password auth methods to be used #695

    • Test suite now also tests unix socket connections #696

    • Fix SSCursor raising InternalError when last result was not fully retrieved #635

    • Remove deprecated no_delay argument #702

    • Support PyMySQL up to version 1.0.2 #643

    • Bump minimal PyMySQL version to 1.0.0 #713

    • Align % formatting in Cursor.executemany() with Cursor.execute(), literal % now need to be doubled in Cursor.executemany() #714

    • Fixed unlimited Pool size not working, this is now working as documented by passing maxsize=0 to create_pool #119

    • Added Pool.closed property as present in aiopg #463

    • Fixed SQLAlchemy connection context iterator #410

    • Fix error packet handling for SSCursor #428

    • Required python version is now properly documented in python_requires instead of failing on setup.py execution #731

    • Add rsa extras_require depending on PyMySQL[rsa] #557

    • Migrate to PEP 517 build system #746

    • Self-reported __version__ now returns version generated by setuptools-scm during build, otherwise 'unknown' #748

    • Fix SSCursor raising query timeout error on wrong query #428

    0.0.22 (2021-11-14) ^^^^^^^^^^^^^^^^^^^

    • Support python 3.10 #505

    0.0.21 (2020-11-26) ^^^^^^^^^^^^^^^^^^^

    • Allow to use custom Cursor subclasses #374

    • Fill Connection class with actual client version #388

    • Fix legacy aiter methods #403

    • Fix & update docs #418 #437

    • Ignore pyenv's .python-version file #424

    • Replace asyncio.streams.IncompleteReadError with asyncio.IncompleteReadError #460 #454

    • Add support for SQLAlchemy default parameters #455 #466

    • Update dependencies #485

    • Support Python 3.7 & 3.8 #493

    0.0.20 (2018-12-19) ^^^^^^^^^^^^^^^^^^^

    • Fixed connect_timeout #360

    • Fixed support for SQLA executemany #324

    • Fix the python 3.7 compatibility #357

    • Fixed reuse connections when StreamReader has an exception #339

    • Fixes warning when inserting binary strings #326

    0.0.19 (2018-07-12) ^^^^^^^^^^^^^^^^^^^

    • See v0.0.18

    0.0.18 (2018-07-09) ^^^^^^^^^^^^^^^^^^^

    • Updated to support latest PyMySQL changes.

    • aiomysql now sends client connection info.

    • MySQL8+ Support including sha256_password and cached_sha2_password authentication plugins.

    • Default max packet length sent to the server is no longer 1.

    • Fixes issue where cursor.nextset can hang on query sets that raise errors.

    0.0.17 (2018-07-06) ^^^^^^^^^^^^^^^^^^^

    • Pinned version of PyMySQL

    0.0.16 (2018-06-03) ^^^^^^^^^^^^^^^^^^^

    • Added ability to execute precompiled sqlalchemy queries #294 (Thanks @vlanse)

    0.0.15 (2018-05-20) ^^^^^^^^^^^^^^^^^^^

    • Fixed handling of user-defined types for sqlalchemy #290

    • Fix KeyError when server reports unknown collation #289

    0.0.14 (2018-04-22) ^^^^^^^^^^^^^^^^^^^

    • Fixed SSL connection finalization #282

    0.0.13 (2018-04-19) ^^^^^^^^^^^^^^^^^^^

    • Added SSL support #280 (Thanks @terrycain)

    • Fixed all in aiomysql/init #270 (Thanks @matianjun1)

    • Added docker fixtures #275 (Thanks @terrycain)

    0.0.12 (2018-01-18) ^^^^^^^^^^^^^^^^^^^

    • Fixed support for SQLAlchemy 1.2.0

    • Fixed argument for cursor.execute in sa engine #239 (Thanks @NotSoSuper)

    0.0.11 (2017-12-06) ^^^^^^^^^^^^^^^^^^^

    • Fixed README formatting on pypi

    0.0.10 (2017-12-06) ^^^^^^^^^^^^^^^^^^^

    • Updated regular expressions to be compatible with pymysql #167 (Thanks @AlexLisovoy)

    • Added connection recycling in the pool #216

    0.0.9 (2016-09-14) ^^^^^^^^^^^^^^^^^^

    • Fixed AttributeError in _request_authentication function #104 (Thanks @ttlttl)

    • Fixed legacy auth #105

    • uvloop added to test suite #106

    • Fixed bug with unicode in json field #107 (Thanks @methane)

    0.0.8 (2016-08-24) ^^^^^^^^^^^^^^^^^^

    • Default min pool size reduced to 1 #80 (Thanks @Drizzt1991)

    • Update to PyMySQL 0.7.5 #89

    • Fixed connection cancellation in process of executing a query #79 (Thanks @Drizzt1991)

    0.0.7 (2016-01-27) ^^^^^^^^^^^^^^^^^^

    • Fix for multiple results issue, ported from pymysql #52

    • Fixed useless warning with no_delay option #55

    • Added async/await support for Engine, SAConnection, Transaction #57

    • pool.release returns future so we can wait on it in aexit #60

    • Update to PyMySQL 0.6.7

    0.0.6 (2015-12-11) ^^^^^^^^^^^^^^^^^^

    • Fixed bug with SA rollback (Thanks @khlyestovillarion!)

    • Fixed issue with default no_delay option (Thanks @khlyestovillarion!)

    0.0.5 (2015-10-28) ^^^^^^^^^^^^^^^^^^

    • no_delay option is deprecated and True by default

    • Add Cursor.mogrify() method

    • Support for "LOAD LOCAL INFILE" query.

    • Check connection inside pool, in case of timeout drop it, fixes #25

    • Add support of python 3.5 features to pool, connection and cursor

    0.0.4 (2015-05-23) ^^^^^^^^^^^^^^^^^^

    • Allow to call connection.wait_closed twice.

    • Fixed sqlalchemy 1.0.0 support.

    • Fix #11: Rename Connection.wait_closed() to .ensure_closed()

    • Raise ResourceWarning on non-closed Connection

    • Rename Connection.connect to _connect

    0.0.3 (2015-03-10) ^^^^^^^^^^^^^^^^^^

    • Added support for PyMySQL up to 0.6.6.

    • Ported improvements from PyMySQL.

    • Added basic documentation.

    • Fixed and added more examples.

    0.0.2 (2015-02-17) ^^^^^^^^^^^^^^^^^^

    • Added MANIFEST.in.

    0.0.1 (2015-02-17) ^^^^^^^^^^^^^^^^^^

    • Initial release.

    • Implemented plain connections: connect, Connection, Cursor.

    • Implemented database pools.

    • Ported sqlalchemy optional support.

    Source code(tar.gz)
    Source code(zip)
    aiomysql-0.1.1-py3-none-any.whl(42.78 KB)
    aiomysql-0.1.1.tar.gz(111.45 KB)
  • v0.1.0(Apr 11, 2022)

    Changes

    0.1.0 (2022-04-11) ^^^^^^^^^^^^^^^^^^

    • Don't send sys.argv[0] as program_name to MySQL server by default #620

    • Allow running process as anonymous uid #587

    • Fix timed out MySQL 8.0 connections raising InternalError rather than OperationalError #660

    • Fix timed out MySQL 8.0 connections being returned from Pool #660

    • Ensure connections are properly closed before raising an OperationalError when the server connection is lost #660

    • Ensure connections are properly closed before raising an InternalError when packet sequence numbers are out of sync #660

    • Unix sockets are now internally considered secure, allowing sha256_password and caching_sha2_password auth methods to be used #695

    • Test suite now also tests unix socket connections #696

    • Fix SSCursor raising InternalError when last result was not fully retrieved #635

    • Remove deprecated no_delay argument #702

    • Support PyMySQL up to version 1.0.2 #643

    • Bump minimal PyMySQL version to 1.0.0 #713

    • Align % formatting in Cursor.executemany() with Cursor.execute(), literal % now need to be doubled in Cursor.executemany() #714

    • Fixed unlimited Pool size not working, this is now working as documented by passing maxsize=0 to create_pool #119

    • Added Pool.closed property as present in aiopg #463

    • Fixed SQLAlchemy connection context iterator #410

    • Fix error packet handling for SSCursor #428

    • Required python version is now properly documented in python_requires instead of failing on setup.py execution #731

    • Add rsa extras_require depending on PyMySQL[rsa] #557

    • Migrate to PEP 517 build system #746

    • Self-reported __version__ now returns version generated by setuptools-scm during build, otherwise 'unknown' #748

    • Fix SSCursor raising query timeout error on wrong query #428

    0.0.22 (2021-11-14) ^^^^^^^^^^^^^^^^^^^

    • Support python 3.10 #505

    0.0.21 (2020-11-26) ^^^^^^^^^^^^^^^^^^^

    • Allow to use custom Cursor subclasses #374

    • Fill Connection class with actual client version #388

    • Fix legacy aiter methods #403

    • Fix & update docs #418 #437

    • Ignore pyenv's .python-version file #424

    • Replace asyncio.streams.IncompleteReadError with asyncio.IncompleteReadError #460 #454

    • Add support for SQLAlchemy default parameters #455 #466

    • Update dependencies #485

    • Support Python 3.7 & 3.8 #493

    0.0.20 (2018-12-19) ^^^^^^^^^^^^^^^^^^^

    • Fixed connect_timeout #360

    • Fixed support for SQLA executemany #324

    • Fix the python 3.7 compatibility #357

    • Fixed reuse connections when StreamReader has an exception #339

    • Fixes warning when inserting binary strings #326

    0.0.19 (2018-07-12) ^^^^^^^^^^^^^^^^^^^

    • See v0.0.18

    0.0.18 (2018-07-09) ^^^^^^^^^^^^^^^^^^^

    • Updated to support latest PyMySQL changes.

    • aiomysql now sends client connection info.

    • MySQL8+ Support including sha256_password and cached_sha2_password authentication plugins.

    • Default max packet length sent to the server is no longer 1.

    • Fixes issue where cursor.nextset can hang on query sets that raise errors.

    0.0.17 (2018-07-06) ^^^^^^^^^^^^^^^^^^^

    • Pinned version of PyMySQL

    0.0.16 (2018-06-03) ^^^^^^^^^^^^^^^^^^^

    • Added ability to execute precompiled sqlalchemy queries #294 (Thanks @vlanse)

    0.0.15 (2018-05-20) ^^^^^^^^^^^^^^^^^^^

    • Fixed handling of user-defined types for sqlalchemy #290

    • Fix KeyError when server reports unknown collation #289

    0.0.14 (2018-04-22) ^^^^^^^^^^^^^^^^^^^

    • Fixed SSL connection finalization #282

    0.0.13 (2018-04-19) ^^^^^^^^^^^^^^^^^^^

    • Added SSL support #280 (Thanks @terrycain)

    • Fixed all in aiomysql/init #270 (Thanks @matianjun1)

    • Added docker fixtures #275 (Thanks @terrycain)

    0.0.12 (2018-01-18) ^^^^^^^^^^^^^^^^^^^

    • Fixed support for SQLAlchemy 1.2.0

    • Fixed argument for cursor.execute in sa engine #239 (Thanks @NotSoSuper)

    0.0.11 (2017-12-06) ^^^^^^^^^^^^^^^^^^^

    • Fixed README formatting on pypi

    0.0.10 (2017-12-06) ^^^^^^^^^^^^^^^^^^^

    • Updated regular expressions to be compatible with pymysql #167 (Thanks @AlexLisovoy)

    • Added connection recycling in the pool #216

    0.0.9 (2016-09-14) ^^^^^^^^^^^^^^^^^^

    • Fixed AttributeError in _request_authentication function #104 (Thanks @ttlttl)

    • Fixed legacy auth #105

    • uvloop added to test suite #106

    • Fixed bug with unicode in json field #107 (Thanks @methane)

    0.0.8 (2016-08-24) ^^^^^^^^^^^^^^^^^^

    • Default min pool size reduced to 1 #80 (Thanks @Drizzt1991)

    • Update to PyMySQL 0.7.5 #89

    • Fixed connection cancellation in process of executing a query #79 (Thanks @Drizzt1991)

    0.0.7 (2016-01-27) ^^^^^^^^^^^^^^^^^^

    • Fix for multiple results issue, ported from pymysql #52

    • Fixed useless warning with no_delay option #55

    • Added async/await support for Engine, SAConnection, Transaction #57

    • pool.release returns future so we can wait on it in aexit #60

    • Update to PyMySQL 0.6.7

    0.0.6 (2015-12-11) ^^^^^^^^^^^^^^^^^^

    • Fixed bug with SA rollback (Thanks @khlyestovillarion!)

    • Fixed issue with default no_delay option (Thanks @khlyestovillarion!)

    0.0.5 (2015-10-28) ^^^^^^^^^^^^^^^^^^

    • no_delay option is deprecated and True by default

    • Add Cursor.mogrify() method

    • Support for "LOAD LOCAL INFILE" query.

    • Check connection inside pool, in case of timeout drop it, fixes #25

    • Add support of python 3.5 features to pool, connection and cursor

    0.0.4 (2015-05-23) ^^^^^^^^^^^^^^^^^^

    • Allow to call connection.wait_closed twice.

    • Fixed sqlalchemy 1.0.0 support.

    • Fix #11: Rename Connection.wait_closed() to .ensure_closed()

    • Raise ResourceWarning on non-closed Connection

    • Rename Connection.connect to _connect

    0.0.3 (2015-03-10) ^^^^^^^^^^^^^^^^^^

    • Added support for PyMySQL up to 0.6.6.

    • Ported improvements from PyMySQL.

    • Added basic documentation.

    • Fixed and added more examples.

    0.0.2 (2015-02-17) ^^^^^^^^^^^^^^^^^^

    • Added MANIFEST.in.

    0.0.1 (2015-02-17) ^^^^^^^^^^^^^^^^^^

    • Initial release.

    • Implemented plain connections: connect, Connection, Cursor.

    • Implemented database pools.

    • Ported sqlalchemy optional support.

    Source code(tar.gz)
    Source code(zip)
    aiomysql-0.1.0-py3-none-any.whl(42.79 KB)
    aiomysql-0.1.0.tar.gz(111.28 KB)
  • v0.1.0rc2(Apr 11, 2022)

    Changes

    To be included in 0.1.0 (unreleased) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

    • Don't send sys.argv[0] as program_name to MySQL server by default #620
    • Allow running process as anonymous uid #587
    • Fix timed out MySQL 8.0 connections raising InternalError rather than OperationalError #660
    • Fix timed out MySQL 8.0 connections being returned from Pool #660
    • Ensure connections are properly closed before raising an OperationalError when the server connection is lost #660
    • Ensure connections are properly closed before raising an InternalError when packet sequence numbers are out of sync #660
    • Unix sockets are now internally considered secure, allowing sha256_password and caching_sha2_password auth methods to be used #695
    • Test suite now also tests unix socket connections #696
    • Fix SSCursor raising InternalError when last result was not fully retrieved #635
    • Remove deprecated no_delay argument #702
    • Support PyMySQL up to version 1.0.2 #643
    • Bump minimal PyMySQL version to 1.0.0 #713
    • Align % formatting in Cursor.executemany() with Cursor.execute(), literal % now need to be doubled in Cursor.executemany() #714
    • Fixed unlimited Pool size not working, this is now working as documented by passing maxsize=0 to create_pool #119
    • Added Pool.closed property as present in aiopg #463
    • Fixed SQLAlchemy connection context iterator #410
    • Fix error packet handling for SSCursor #428
    • Required python version is now properly documented in python_requires instead of failing on setup.py execution #731
    • Add rsa extras_require depending on PyMySQL[rsa] #557
    • Migrate to PEP 517 build system #746
    • Self-reported __version__ now returns version generated by setuptools-scm during build, otherwise 'unknown' #748
    • Fix SSCursor raising query timeout error on wrong query #428

    0.0.22 (2021-11-14) ^^^^^^^^^^^^^^^^^^^

    • Support python 3.10 #505

    0.0.21 (2020-11-26) ^^^^^^^^^^^^^^^^^^^

    • Allow to use custom Cursor subclasses #374

    • Fill Connection class with actual client version #388

    • Fix legacy aiter methods #403

    • Fix & update docs #418 #437

    • Ignore pyenv's .python-version file #424

    • Replace asyncio.streams.IncompleteReadError with asyncio.IncompleteReadError #460 #454

    • Add support for SQLAlchemy default parameters #455 #466

    • Update dependencies #485

    • Support Python 3.7 & 3.8 #493

    0.0.20 (2018-12-19) ^^^^^^^^^^^^^^^^^^^

    • Fixed connect_timeout #360

    • Fixed support for SQLA executemany #324

    • Fix the python 3.7 compatibility #357

    • Fixed reuse connections when StreamReader has an exception #339

    • Fixes warning when inserting binary strings #326

    0.0.19 (2018-07-12) ^^^^^^^^^^^^^^^^^^^

    • See v0.0.18

    0.0.18 (2018-07-09) ^^^^^^^^^^^^^^^^^^^

    • Updated to support latest PyMySQL changes.

    • aiomysql now sends client connection info.

    • MySQL8+ Support including sha256_password and cached_sha2_password authentication plugins.

    • Default max packet length sent to the server is no longer 1.

    • Fixes issue where cursor.nextset can hang on query sets that raise errors.

    0.0.17 (2018-07-06) ^^^^^^^^^^^^^^^^^^^

    • Pinned version of PyMySQL

    0.0.16 (2018-06-03) ^^^^^^^^^^^^^^^^^^^

    • Added ability to execute precompiled sqlalchemy queries #294 (Thanks @vlanse)

    0.0.15 (2018-05-20) ^^^^^^^^^^^^^^^^^^^

    • Fixed handling of user-defined types for sqlalchemy #290

    • Fix KeyError when server reports unknown collation #289

    0.0.14 (2018-04-22) ^^^^^^^^^^^^^^^^^^^

    • Fixed SSL connection finalization #282

    0.0.13 (2018-04-19) ^^^^^^^^^^^^^^^^^^^

    • Added SSL support #280 (Thanks @terrycain)

    • Fixed all in aiomysql/init #270 (Thanks @matianjun1)

    • Added docker fixtures #275 (Thanks @terrycain)

    0.0.12 (2018-01-18) ^^^^^^^^^^^^^^^^^^^

    • Fixed support for SQLAlchemy 1.2.0

    • Fixed argument for cursor.execute in sa engine #239 (Thanks @NotSoSuper)

    0.0.11 (2017-12-06) ^^^^^^^^^^^^^^^^^^^

    • Fixed README formatting on pypi

    0.0.10 (2017-12-06) ^^^^^^^^^^^^^^^^^^^

    • Updated regular expressions to be compatible with pymysql #167 (Thanks @AlexLisovoy)

    • Added connection recycling in the pool #216

    0.0.9 (2016-09-14) ^^^^^^^^^^^^^^^^^^

    • Fixed AttributeError in _request_authentication function #104 (Thanks @ttlttl)

    • Fixed legacy auth #105

    • uvloop added to test suite #106

    • Fixed bug with unicode in json field #107 (Thanks @methane)

    0.0.8 (2016-08-24) ^^^^^^^^^^^^^^^^^^

    • Default min pool size reduced to 1 #80 (Thanks @Drizzt1991)

    • Update to PyMySQL 0.7.5 #89

    • Fixed connection cancellation in process of executing a query #79 (Thanks @Drizzt1991)

    0.0.7 (2016-01-27) ^^^^^^^^^^^^^^^^^^

    • Fix for multiple results issue, ported from pymysql #52

    • Fixed useless warning with no_delay option #55

    • Added async/await support for Engine, SAConnection, Transaction #57

    • pool.release returns future so we can wait on it in aexit #60

    • Update to PyMySQL 0.6.7

    0.0.6 (2015-12-11) ^^^^^^^^^^^^^^^^^^

    • Fixed bug with SA rollback (Thanks @khlyestovillarion!)

    • Fixed issue with default no_delay option (Thanks @khlyestovillarion!)

    0.0.5 (2015-10-28) ^^^^^^^^^^^^^^^^^^

    • no_delay option is deprecated and True by default

    • Add Cursor.mogrify() method

    • Support for "LOAD LOCAL INFILE" query.

    • Check connection inside pool, in case of timeout drop it, fixes #25

    • Add support of python 3.5 features to pool, connection and cursor

    0.0.4 (2015-05-23) ^^^^^^^^^^^^^^^^^^

    • Allow to call connection.wait_closed twice.

    • Fixed sqlalchemy 1.0.0 support.

    • Fix #11: Rename Connection.wait_closed() to .ensure_closed()

    • Raise ResourceWarning on non-closed Connection

    • Rename Connection.connect to _connect

    0.0.3 (2015-03-10) ^^^^^^^^^^^^^^^^^^

    • Added support for PyMySQL up to 0.6.6.

    • Ported improvements from PyMySQL.

    • Added basic documentation.

    • Fixed and added more examples.

    0.0.2 (2015-02-17) ^^^^^^^^^^^^^^^^^^

    • Added MANIFEST.in.

    0.0.1 (2015-02-17) ^^^^^^^^^^^^^^^^^^

    • Initial release.

    • Implemented plain connections: connect, Connection, Cursor.

    • Implemented database pools.

    • Ported sqlalchemy optional support.

    Source code(tar.gz)
    Source code(zip)
    aiomysql-0.1.0rc2-py3-none-any.whl(42.84 KB)
    aiomysql-0.1.0rc2.tar.gz(111.33 KB)
  • v0.0.21(Nov 26, 2020)

    Changes

    • Allow to use custom Cursor subclasses #374

    • Fill Connection class with actual client version #388

    • Fix legacy aiter methods #403

    • Fix & update docs #418 #437

    • Ignore pyenv's .python-version file #424

    • Replace asyncio.streams.IncompleteReadError with asyncio.IncompleteReadError #460 #454

    • Add support for SQLAlchemy default parameters #455 #466

    • Update dependencies #485

    • Support Python 3.7 & 3.8 #493

    Source code(tar.gz)
    Source code(zip)
  • v0.0.20(Dec 19, 2018)

    Changes

    • Fixed connect_timeout #360

    • Fixed support for SQLA executemany #324

    • Fix the python 3.7 compatibility #357

    • Fixed reuse connections when StreamReader has an exception #339

    • Fixes warning when inserting binary strings #326

    Source code(tar.gz)
    Source code(zip)
  • v0.0.19(Jul 11, 2018)

  • v0.0.18(Jul 9, 2018)

    CHANGES

    • Updated to support latest PyMySQL changes.
    • aiomysql now sends client connection info.
    • MySQL8+ Support including sha256_password and cached_sha2_password authentication plugins.
    • Default max packet length sent to the server is no longer 1.
    • Fixes issue where cursor.nextset can hang on query sets that raise errors.
    Source code(tar.gz)
    Source code(zip)
  • v0.0.17(Jul 6, 2018)

  • v0.0.16(Jun 3, 2018)

  • v0.0.15(May 20, 2018)

  • v0.0.14(Apr 22, 2018)

  • v0.0.13(Apr 19, 2018)

    CHANGES

    • Added SSL support #280 (Thanks @terrycain)
    • Fixed all in aiomysql/init #270 (Thanks @matianjun1)
    • Added docker fixtures #275 (Thanks @terrycain)
    Source code(tar.gz)
    Source code(zip)
  • v0.0.12(Jan 18, 2018)

  • v0.0.9(Sep 14, 2016)

    CHANGES

    • Fixed AttributeError in _request_authentication function #104 (Thanks @ttlttl)
    • Fixed legacy auth #105
    • uvloop added to test suite #106
    • Fixed bug with unicode in json field #107 (Thanks @methane)
    Source code(tar.gz)
    Source code(zip)
  • v0.0.8(Aug 24, 2016)

    CHANGES

    • Default min pool size reduced to 1 #80 (Thanks @Drizzt1991)
    • Update to PyMySQL 0.7.5 #89
    • Fixed connection cancellation in process of executing a query #79 (Thanks @Drizzt1991)
    Source code(tar.gz)
    Source code(zip)
  • v0.0.7(Jan 27, 2016)

    CHANGES

    • Fix for multiple results issue, ported from pymysql #52
    • Fixed useless warning with no_delay option #55
    • Added async/await support for Engine, SAConnection, Transaction #57
    • pool.release returns future so we can wait on it in __aexit__ #60
    • Update to PyMySQL 0.6.7
    Source code(tar.gz)
    Source code(zip)
  • v0.0.6(Dec 10, 2015)

  • v0.0.5(Oct 27, 2015)

    CHANGES

    • no_delay option is deprecated and True by default
    • Add Cursor.mogrify() method
    • Support for "LOAD LOCAL INFILE" query.
    • Check connection inside pool, in case of timeout drop it, fixes #25
    • Add support of python 3.5 features to pool, connection and cursor
    Source code(tar.gz)
    Source code(zip)
  • v0.0.4(May 23, 2015)

    CHANGES

    • Allow to call connection.wait_closed twice.
    • Fixed sqlalchemy 1.0.0 support.
    • Fix #11: Rename Connection.wait_closed() to .ensure_closed()
    • Raise ResourceWarning on non-closed Connection
    • Rename Connection.connect to _connect
    Source code(tar.gz)
    Source code(zip)
  • v0.0.3(Mar 10, 2015)

    Changes

    • Added support for PyMySQL up to 0.6.6.
    • Ported improvements from PyMySQL.
    • Added basic documentation.
    • Fixed and added more examples.
    Source code(tar.gz)
    Source code(zip)
  • v0.0.2(Feb 17, 2015)

  • v0.0.1(Feb 17, 2015)

    Changes

    • Initial release.
    • Implemented plain connections: connect, Connection, Cursor.
    • Implemented database pools.
    • Ported sqlalchemy optional support.
    Source code(tar.gz)
    Source code(zip)
Owner
aio-libs
The set of asyncio-based libraries built with high quality
aio-libs
Py2neo is a comprehensive toolkit for working with Neo4j from within Python applications or from the command line.

Py2neo Py2neo is a client library and toolkit for working with Neo4j from within Python applications and from the command line. The library supports b

Nigel Small 1.2k Jan 02, 2023
A selection of SQLite3 databases to practice querying from.

Dummy SQL Databases This is a collection of dummy SQLite3 databases, for learning and practicing SQL querying, generated with the VS Code extension Ge

1 Feb 26, 2022
Easy-to-use data handling for SQL data stores with support for implicit table creation, bulk loading, and transactions.

dataset: databases for lazy people In short, dataset makes reading and writing data in databases as simple as reading and writing JSON files. Read the

Friedrich Lindenberg 4.2k Jan 02, 2023
Py2neo is a client library and toolkit for working with Neo4j from within Python

Py2neo Py2neo is a client library and toolkit for working with Neo4j from within Python applications. The library supports both Bolt and HTTP and prov

py2neo.org 1.2k Jan 02, 2023
Amazon S3 Transfer Manager for Python

s3transfer - An Amazon S3 Transfer Manager for Python S3transfer is a Python library for managing Amazon S3 transfers. Note This project is not curren

the boto project 158 Jan 07, 2023
Official Python low-level client for Elasticsearch

Python Elasticsearch Client Official low-level client for Elasticsearch. Its goal is to provide common ground for all Elasticsearch-related code in Py

elastic 3.8k Jan 01, 2023
Sample scripts to show extracting details directly from the AIQUM database

Sample scripts to show extracting details directly from the AIQUM database

1 Nov 19, 2021
dask-sql is a distributed SQL query engine in python using Dask

dask-sql is a distributed SQL query engine in Python. It allows you to query and transform your data using a mixture of common SQL operations and Python code and also scale up the calculation easily

Nils Braun 271 Dec 30, 2022
A Python DB-API and SQLAlchemy dialect to Google Spreasheets

Note: shillelagh is a drop-in replacement for gsheets-db-api, with many additional features. You should use it instead. If you're using SQLAlchemy all

Beto Dealmeida 185 Jan 01, 2023
Make Your Company Data Driven. Connect to any data source, easily visualize, dashboard and share your data.

Redash is designed to enable anyone, regardless of the level of technical sophistication, to harness the power of data big and small. SQL users levera

Redash 22.4k Dec 30, 2022
Pure-python PostgreSQL driver

pg-purepy pg-purepy is a pure-Python PostgreSQL wrapper based on the anyio library. A lot of this library was inspired by the pg8000 library. Credits

Lura Skye 11 May 23, 2022
Logica is a logic programming language that compiles to StandardSQL and runs on Google BigQuery.

Logica: language of Big Data Logica is an open source declarative logic programming language for data manipulation. Logica is a successor to Yedalog,

Evgeny Skvortsov 1.5k Dec 30, 2022
Example Python codes that works with MySQL and Excel files (.xlsx)

Python x MySQL x Excel by Zinglecode Example Python codes that do the processes between MySQL database and Excel spreadsheet files. YouTube videos MyS

Potchara Puttawanchai 1 Feb 07, 2022
Pure Python MySQL Client

PyMySQL Table of Contents Requirements Installation Documentation Example Resources License This package contains a pure-Python MySQL client library,

PyMySQL 7.2k Jan 09, 2023
Import entity definition document into SQLie3. Manage the entity. Also, create a "Create Table SQL file".

EntityDocumentMaker Version 1.00 After importing the entity definition (Excel file), store the data in sqlite3. ใ‚จใƒณใƒ†ใ‚ฃใƒ†ใ‚ฃๅฎš็พฉ๏ผˆExcelใƒ•ใ‚กใ‚คใƒซ๏ผ‰ใ‚’ใ‚คใƒณใƒใƒผใƒˆใ—ใŸๅพŒใ€ใƒ‡ใƒผใ‚ฟใ‚’sqlit

G-jon FujiYama 1 Jan 09, 2022
db.py is an easier way to interact with your databases

db.py What is it Databases Supported Features Quickstart - Installation - Demo How To Contributing TODO What is it? db.py is an easier way to interact

yhat 1.2k Jan 03, 2023
A simple password manager I typed with python using MongoDB .

Python with MongoDB A simple python code example using MongoDB. How do i run this code โ€ข First of all you need to have a python on your computer. If y

31 Dec 06, 2022
Pandas Google BigQuery

pandas-gbq pandas-gbq is a package providing an interface to the Google BigQuery API from pandas Installation Install latest release version via conda

Python for Data 345 Dec 28, 2022
Python version of the TerminusDB client - for TerminusDB API and WOQLpy

TerminusDB Client Python Development status โš™๏ธ Python Package status ๐Ÿ“ฆ Python version of the TerminusDB client - for TerminusDB API and WOQLpy Requir

TerminusDB 66 Dec 02, 2022
Use SQL query in a jupyter notebook!

SQL-query Use SQL query in a jupyter notebook! The table I used can be found on UN Data. Or you can just click the link and download the file undata_s

Chuqin 2 Oct 05, 2022