asyncio (PEP 3156) Redis support

Overview

aioredis

asyncio (PEP 3156) Redis client library.

https://travis-ci.com/aio-libs/aioredis.svg?branch=master

Features

hiredis parser Yes
Pure-python parser Yes
Low-level & High-level APIs Yes
Connections Pool Yes
Pipelining support Yes
Pub/Sub support Yes
SSL/TLS support Yes
Sentinel support Yes
Redis Cluster support WIP
Trollius (python 2.7) No
Tested CPython versions 3.6, 3.7, 3.8 [1] [2]
Tested PyPy3 versions pypy3.6-7.1.1
Tested for Redis server 2.6, 2.8, 3.0, 3.2, 4.0 5.0
Support for dev Redis server through low-level API
[1] For Python 3.3, 3.4 support use aioredis v0.3.
[2] For Python 3.5 support use aioredis v1.2.

Documentation

http://aioredis.readthedocs.io/

Usage example

Simple high-level interface with connections pool:

import asyncio
import aioredis

async def go():
    redis = await aioredis.create_redis_pool(
        'redis://localhost')
    await redis.set('my-key', 'value')
    val = await redis.get('my-key', encoding='utf-8')
    print(val)
    redis.close()
    await redis.wait_closed()

asyncio.run(go())
# will print 'value'

Using a pool among multiple coroutine calls:

import asyncio
import string

import aioredis

async def go(r, key, value):
    await r.set(key, value)
    val = await r.get(key)
    print(f"Got {key} -> {val}")

async def main(loop):
    r = await aioredis.create_redis_pool(
        "redis://localhost", minsize=5, maxsize=10, loop=loop
    )
    try:
        return await asyncio.gather(
            *(
                go(r, i, j)
                for i, j in zip(string.ascii_uppercase, string.ascii_lowercase)
            ),
            return_exceptions=True,
        )
    finally:
        r.close()
        await r.wait_closed()

if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    res = loop.run_until_complete(main(loop))

Requirements

Note

hiredis is preferred requirement. Pure-python protocol parser is implemented as well and can be used through parser parameter.

Benchmarks

Benchmarks can be found here: https://github.com/popravich/python-redis-benchmark

Discussion list

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

Or gitter room: https://gitter.im/aio-libs/Lobby

License

The aioredis is offered under MIT license.

Comments
  • Migration to aioredis 2.0

    Migration to aioredis 2.0

    Hi all,

    After #891, aioredis will be making a major jump to aioredis==2.0.0. The PR made aioredis an enormous async port of redis-py. For the migration docs, please refer to: https://github.com/aio-libs/aioredis-py/blob/master/docs/migration.md. To install:

    pip install aioredis==2.0.0
    
    Old pip install instructions for beta left for posterity

    pip install aioredis==2.0.0b1

    To install aioredis at a specific commit:

    $ pip install git+git://github.com/aio-libs/aioredis-py.git@ eb4c001a598c01d9a0e5f2a24065c486c823d1b0

    To install at master:

    pip install git+git://github.com/aio-libs/aioredis-py.git@master

    We'd love to hear how well this new version of aioredis integrates with your current production code! @abrookins and I will be updating this specific GitHub issue with any updates that you should be aware of; any breakages can be reported as a separate GitHub issue or in this one, too.

    Thanks everyone!

    help wanted 
    opened by Andrew-Chen-Wang 75
  • Port redis-py impl and tests to aioredis.

    Port redis-py impl and tests to aioredis.

    What do these changes do?

    This is a full port of redis-py's client implementation into an asyncio-friendly implementation.

    The approach is essentially a line-by-line re-implementation. The major caveats to this are:

    1. Some connection code is simply incompatible and had to be implemented differently.
    2. We use black on our code-base, which will create line-count discrepancies between the two sources.
    3. I've added a first-pass at type annotations (a lot of work is needed to tighten it up if we want to add mypy to our CI, but it gets us much further along).

    Beyond that, all functional logic remains as close to the original, synchronous source as possible.

    The motivation behind this is to ease the workload for future contributors and maintainers. By replicating redis-py's implementation, we greatly reduce our own workload, and are able to quickly port new features and bugfixes as they are added to redis-py, including tests.

    Are there changes in behavior for the user?

    Yes.

    Related issue number

    #822

    Checklist

    • [x] I think the code is well written
    • [x] Unit tests for the changes exist
    • [x] Documentation reflects the changes
    • [x] If you provide code modification, please add yourself to CONTRIBUTORS.txt
      • The format is <Name> <Surname>.
      • Please keep alphabetical order, the file is sorted by names.
    • [x] 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.
    bot:chronographer:provided 
    opened by seandstewart 63
  • Add cluster support

    Add cluster support

    I have continued the work of trezorg to add cluster support. All the old tests now run against both a standard Redis and a Redis cluster (except those which test features that are not available or not yet supported on a cluster).

    enhancement 
    opened by ghost 43
  • Maintainership Moving Forward

    Maintainership Moving Forward

    State of the Repo

    As a result of #820, I've taken on maintainership of this repository, with the main goal of my work being to resuscitate this library and bring it back up to speed with the reported bugs and open PRs.

    I'm calling on the community for help!

    I don't have a lot of time, but I didn't want to see this library die. I would please ask that if you stumble into this issue wondering if the library is dead or wishing to report an issue, please consider joining as a contributor!

    Goals

    • [x] Update and add documentation for usage and for contributing
    • [x] Fix CI builds
    • [x] Migrate to GitHub Actions from Travis CI
    • [x] Address/merge outstanding PRs
    • [x] Triage existing tickets
    • [x] Resolve issues with supporting Python3.8+

    This ticket will be updated as progress is made

    help wanted 
    opened by seandstewart 34
  • Adding stream commands

    Adding stream commands

    @antirez is in the process of adding streams to Redis. This PR adds initial support for the XADD/XRANGE/XREAD commands in aioredis.

    Tests

    I've written tests and added the streams Redis branch to the travis config. In theory, the tests will only be run when the streams branch is available. ~~The logic is a bit hacky, but I figured it will only be until streams makes it into 4.0~~ (now improved as the hacky version didn't actually work).

    Style

    I'm very open to feedback on my implementation style for the new commands. I've tried to stick to the aioredis style, but I think I will have probably wandered here or there. Happy to make any corrections or alterations.

    Reason

    This is my first time using aioredis. I'm working on another project in which I would like to experiment with Redis streams, plus I also need asyncio support. I therefore thought I'd contribute this here.

    As I said, happy to make any changes etc.

    Remaining work

    • [ ] Add support for the MAXLEN parameter in xadd()
    • [ ] There is a question regarding style in the source for xread()
    enhancement 
    opened by adamcharnock 23
  • When an aioredis coroutine is wrapped in a cancelled task, the pending call is not cancelled

    When an aioredis coroutine is wrapped in a cancelled task, the pending call is not cancelled

    When a coroutine is wrapped in a Task that is cancelled, the pending redis call is not cancelled and its result is lost.

    Here is an example using BLPOP

    #!/usr/bin/env python
    
    import asyncio
    import aioredis
    
    
    @asyncio.coroutine
    def simulate_client():
        redis = yield from aioredis.create_redis(('localhost', 6379))
        print("$ Client sleeps")
        yield from asyncio.sleep(2)
        print("$ Client add task hello")
        yield from redis.lpush("channel", "hello")
        print("$ Client sleeps")    
        yield from asyncio.sleep(10)
    
    
    @asyncio.coroutine
    def simulate_server():
        redis = yield from aioredis.create_redis(('localhost', 6379))
        print("# Wait for task")
        try:
            data = yield from asyncio.wait_for(redis.blpop("channel"), 1)
        except asyncio.TimeoutError:
            print("# BLPOP timed-out")
            yield from asyncio.sleep(5)
            print("# Wait for task")
            try:
                data = yield from asyncio.wait_for(redis.blpop("channel"), 1)
            except asyncio.TimeoutError:
                print("# BLPOP timed-out the task is lost.")
            else:
                print("# BLPOP returned: %s" % data)
        else:
            print("# BLPOP returned: %s" % data)
    
    
    asyncio.get_event_loop().run_until_complete(
        asyncio.wait({simulate_server(), simulate_client()})
    )
    

    For this example, I can fix it using the timeout value of BLPOP but I have the same behavior when using it with asyncio.wait

        yield from asyncio.wait(
                    {redis.blpop("channel"), websocket.recv()},
                    return_when=asyncio.FIRST_COMPLETED)
    
    bug 
    opened by Natim 22
  • Change the hiredis install method.

    Change the hiredis install method.

    A newer version of hiredis is available on github not pip. It would have to be installed lik this instead:

    pip install --upgrade https://github.com/redis/hiredis-py/archive/master.zip
    

    Hope you understand that the one on PyPi was so old that it is legit 2 years ago. So the github one is more or so along the lines of current.

    opened by AraHaan 19
  • aioredis pipeline implementation problem

    aioredis pipeline implementation problem

    Hi i was taking a look at the way that the pipeline has implemented in aioredis, and it seems that the way it is implemented it's not actually a redis pipeline, and it just queues commands in a list in code and at the execution time, it executes each one of commands separately on a single connection to redis.

    This funcition is my problem.

        def _send_pipeline(self, conn):
            with conn._buffered():
                for fut, cmd, args, kw in self._pipeline:
                    try:
                        result_fut = conn.execute(cmd, *args, **kw)  # --- execute each command separately
                        result_fut.add_done_callback(
                            functools.partial(self._check_result, waiter=fut))
                    except Exception as exc:
                        fut.set_exception(exc)
                    else:
                        yield result_fut
    

    please correct me if i'me wrong.

    thanks

    resolved-via-latest 
    opened by Hesarn 17
  • Having issues with aioredis.from_url(<unix socket addr>)

    Having issues with aioredis.from_url()

    https://aioredis.readthedocs.io/en/latest/getting-started/#connecting asyncio.from_url("unix:///run/redis.sock")

    Traceback (most recent call last): File "", line 1, in File "/root/venv/lib/python3.9/asyncio/runners.py", line 44, in run return loop.run_until_complete(main) File "/root/venv/lib/python3.9/asyncio/base_events.py", line 642, in run_until_complete return future.result() File "", line 3, in main File "/root/venv/lib/python3.9/site-packages/aioredis/client.py", line 1034, in execute_command conn = self.connection or await pool.get_connection(command_name, **options) File "/root/venv/lib/python3.9/site-packages/aioredis/connection.py", line 1362, in get_connection await connection.connect() File "/root/venv/lib/python3.9/site-packages/aioredis/connection.py", line 651, in connect if self.is_connected: File "/root/venv/lib/python3.9/site-packages/aioredis/connection.py", line 641, in is_connected return bool(self._reader and self._writer) AttributeError: _reader

    bug 
    opened by a-pixel-on-your-screen 15
  • fix NoneType object is not iterable when iterate over self._waiters

    fix NoneType object is not iterable when iterate over self._waiters

    What do these changes do?

    #726 fix a problem lead by python3.8

    Are there changes in behavior for the user?

    nope

    Related issue number

    #726

    Checklist

    • [x] I think the code is well written
    • [x] Unit tests for the changes exist
    • [ ] Documentation reflects the changes
    • [x] If you provide code modification, please add yourself to CONTRIBUTORS.txt
      • The format is <Name> <Surname>.
      • Please keep alphabetical order, the file is sorted by names.
    • [x] 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.
    bot:chronographer:provided 
    opened by jeffguorg 15
  • fix socket.error raises

    fix socket.error raises

    Fixes #1121

    What do these changes do?

    fix raise aioredis.exceptions.ConnectionError instead of raw socket.error or its subclasses

    Are there changes in behavior for the user?

    no

    Related issue number

    #1121

    bot:chronographer:provided 
    opened by x0day 14
  • Bump coverage from 6.3.1 to 7.0.2

    Bump coverage from 6.3.1 to 7.0.2

    Bumps coverage from 6.3.1 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 
    opened by dependabot[bot] 0
  • Bump mkdocs-material from 8.1.9 to 9.0.1

    Bump mkdocs-material from 8.1.9 to 9.0.1

    Bumps mkdocs-material from 8.1.9 to 9.0.1.

    Release notes

    Sourced from mkdocs-material's releases.

    mkdocs-material-9.0.1

    • Removed pipdeptree dependency for built-in info plugin
    • Fixed appearance of linked tags when hovered (9.0.0 regression)
    • Fixed #4810: Abbreviations run out of screen on touch devices
    • Fixed #4813: View source and edit button links are the same

    mkdocs-material-9.0.0

    Additions and improvements

    • Added support for rich search previews
    • Added support for tokenizer lookahead
    • Added support for better search highlighting
    • Added support for excluding content from search
    • Added support for configurable search pipeline
    • Added support for offline search via offline plugin
    • Added support for multiple instances of built-in tags plugin
    • Added support for removing copy-to-clipboard button
    • Added support for removing footer navigation
    • Added support for button to view the source of a page
    • Improved readability of query string for search sharing
    • Improved stability of search plugin when using --dirtyreload
    • Improved search result group button, now sticky and stable
    • Updated Norwegian translations
    • Updated MkDocs to 1.4.2

    Removals

    • Removed deprecated alternative admonition qualifiers
    • Removed :is() selectors (in output) for easier overriding
    • Removed .title suffix on translations
    • Removed legacy method for providing page title in feedback URL
    • Removed support for indexing only titles in search
    • Removed support for custom search transforms
    • Removed support for custom search workers
    • Removed temporary snow feature (easter egg)

    Fixes

    • Fixed Norwegian and Korean language code
    • Fixed detection of composition events in search interface
    • Fixed search plugin not using title set via front matter
    • Fixed search highlighting of tags
    • Fixed search sharing URL using post transformed string
    • Fixed theme-color meta tag getting out-of-sync with palette toggle
    • Fixed prev/next page keyboard navigation when footer is not present
    • Fixed overflowing navigation tabs not being scrollable
    • Fixed inclusion of code block line numbers from search

    mkdocs-material-9.0.0b4

    Note: this is a beta release – see #4714

    ... (truncated)

    Changelog

    Sourced from mkdocs-material's changelog.

    mkdocs-material-9.0.1 (2022-01-03)

    • Removed pipdeptree dependency for built-in info plugin
    • Fixed appearance of linked tags when hovered (9.0.0 regression)
    • Fixed #4810: Abbreviations run out of screen on touch devices
    • Fixed #4813: View source and edit button links are the same

    mkdocs-material-9.0.0 (2023-01-02)

    Additions and improvements

    • Added support for rich search previews
    • Added support for tokenizer lookahead
    • Added support for better search highlighting
    • Added support for excluding content from search
    • Added support for configurable search pipeline
    • Added support for offline search via offline plugin
    • Added support for multiple instances of built-in tags plugin
    • Added support for removing copy-to-clipboard button
    • Added support for removing footer navigation
    • Added support for button to view the source of a page
    • Improved readability of query string for search sharing
    • Improved stability of search plugin when using --dirtyreload
    • Improved search result group button, now sticky and stable
    • Updated Norwegian translations
    • Updated MkDocs to 1.4.2

    Removals

    • Removed deprecated alternative admonition qualifiers
    • Removed :is() selectors (in output) for easier overriding
    • Removed .title suffix on translations
    • Removed legacy method for providing page title in feedback URL
    • Removed support for indexing only titles in search
    • Removed support for custom search transforms
    • Removed support for custom search workers
    • Removed temporary snow feature (easter egg)

    Fixes

    • Fixed Norwegian and Korean language code
    • Fixed detection of composition events in search interface
    • Fixed search plugin not using title set via front matter
    • Fixed search highlighting of tags
    • Fixed search sharing URL using post transformed string
    • Fixed theme-color meta tag getting out-of-sync with palette toggle
    • Fixed prev/next page keyboard navigation when footer is not present
    • Fixed overflowing navigation tabs not being scrollable
    • Fixed inclusion of code block line numbers from search

    ... (truncated)

    Upgrade guide

    Sourced from mkdocs-material's upgrade guide.

    How to upgrade

    Upgrade to the latest version with:

    pip install --upgrade --force-reinstall mkdocs-material
    

    Show the currently installed version with:

    pip show mkdocs-material
    

    Upgrading from 8.x to 9.x

    This major release includes a brand new search implementation that is faster and allows for rich previews, advanced tokenization and better highlighting. It was available as part of Insiders for over a year, and now that the funding goal was hit, makes its way into the community edition.

    Changes to mkdocs.yml

    content.code.copy

    The copy-to-clipboard buttons are now opt-in and can be enabled or disabled per block. If you wish to enable them for all code blocks, add the following lines to mkdocs.yml:

    theme:
      features:
        - content.code.copy
    

    content.action.*

    A "view source" button can be shown next to the "edit this page" button, both of which must now be explicitly enabled. Add the following lines to mkdocs.yml:

    theme:
      features:
        - content.action.edit
        - content.action.view
    

    navigation.footer

    ... (truncated)

    Commits
    • d0d6f19 Documentation
    • 305e79f Prepare 9.0.1 release
    • feef8cd Fixed view source button link
    • 1287ce8 Updated changelog
    • 7f0d6e8 Removed pipdeptree dependency for info plugin
    • 0de33b3 Fixed appearance of linked tags when hovered (9.0.0 regression)
    • fbfb662 Fixed positioning of abbreviations on touch devices
    • 788f087 Updated languages in documentation and schema
    • 7c5b972 Documentation
    • 2b9136d Added documentation for navigation footer and code actions
    • 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 
    opened by dependabot[bot] 0
  • Use Version (packaging) instead of StrictVersion (distutils)

    Use Version (packaging) instead of StrictVersion (distutils)

    This PR removes the Deprectation Warning found when running tests:

    DeprecationWarning: distutils Version classes are deprecated. Use packaging.version instead.
    hiredis_version = StrictVersion(hiredis.__version__)
    

    I just wanted to get rid of it. :)

    What do these changes do?

    Are there changes in behavior for the user?

    Related issue number

    Checklist

    • [ ] I think the code is well written
    • [ ] Unit tests for the changes exist
    • [ ] Documentation reflects the changes
    • [ ] If you provide code modification, please add yourself to CONTRIBUTORS.txt
      • The format is <Name> <Surname>.
      • Please keep alphabetical order, the file is sorted by names.
    • [ ] 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 bonastreyair 0
  • Bump actions/cache from 2.1.6 to 3.2.2

    Bump actions/cache from 2.1.6 to 3.2.2

    Bumps actions/cache from 2.1.6 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.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 
    opened by dependabot[bot] 0
  • coroutine 'Connection.disconnect' was never awaited

    coroutine 'Connection.disconnect' was never awaited

    Describe the bug

    Hello. I always get the runtime warning when I stop my code. The on_startup function is called when the aiogram application starts

    To Reproduce

    Run the following code

    from aioredis import Redis
    from aiogram import Dispatcher
    
    from typing import Dict
    
    
    class Params:
    
      def __init__(self) -> None:
        self.redis = None
    
      async def get_redis(self) -> Redis:
        if not self.redis:
          self.redis = Redis(host='redis', password='redis_password')
    
        return self.redis
    
      async def get_params(self) -> Dict:
        redis = await self.get_redis()
        return await redis.get('PARAMS')
    
      async def close(self) -> None:
        if self.redis:
          await self.redis.close()
    
    params = Params()
    
    
    async def on_startup(dispatcher: Dispatcher) -> None:
      print(await params.get_params())
      await params.close()
    

    Stop the code

    Expected behavior

    No runtime warning when the code stops because I manually close the redis connection

    Logs/tracebacks

    sys:1: RuntimeWarning: coroutine 'Connection.disconnect' was never awaited
    

    Python Version

    Python 3.10.8
    

    aioredis Version

    Version: 2.0.1
    

    Additional context

    No response

    Code of Conduct

    • [X] I agree to follow the aio-libs Code of Conduct
    bug 
    opened by IOANNB4R 0
  • Bump mkdocstrings from 0.17.0 to 0.19.1

    Bump mkdocstrings from 0.17.0 to 0.19.1

    Bumps mkdocstrings from 0.17.0 to 0.19.1.

    Release notes

    Sourced from mkdocstrings's releases.

    0.19.0

    Highlights

    We decided to deprecate a few things to pave the way towards a more stable code base, bringing us closer to a v1.

    • Selection and rendering options are now combined into a single options key. Using the old keys will emit a deprecation warning.
    • The BaseCollector and BaseRenderer classes are deprecated in favor of BaseHandler, which merges their functionality. Using the old classes will emit a deprecation warning.

    New versions of the Python handler and the legacy Python handler were also released in coordination with mkdocstrings 0.19. See their respective changelogs: python, python-legacy. Most notably, the Python handler gained the members and filters options that prevented many users to switch to it.

    mkdocstrings stopped depending directly on the legacy Python handler. It means you now have to explicitely depend on it, directly or through the extra provided by mkdocstrings, if you want to continue using it.

    Packaging / Dependencies

    Features

    Code Refactoring

    • Support options / deprecated options mix-up (7c71f26 by Timothée Mazzucotelli).
    • Deprecate watch feature in favor of MkDocs' built-in one (c20022e by Timothée Mazzucotelli).
    • Log relative template paths if possible, instead of absolute (91f5f83 by Timothée Mazzucotelli).
    • Deprecate selection and rendering YAML keys (3335310 by Timothée Mazzucotelli). [PR #420](mkdocstrings/mkdocstrings#420)
    • Deprecate BaseCollector and BaseRenderer (eb822cb by Timothée Mazzucotelli). [PR #413](mkdocstrings/mkdocstrings#413)

    0.18.0

    Highlights

    Packaging / Dependencies

    • Add Crystal extra, update Python extras versions (b8222b0 by Timothée Mazzucotelli). [PR #374](mkdocstrings/mkdocstrings#374)
    • Update autorefs to actually required version (fc6c7f6 by Timothée Mazzucotelli).
    • Drop Python 3.6 support (7205ac6 by Timothée Mazzucotelli).

    Features

    ... (truncated)

    Changelog

    Sourced from mkdocstrings's changelog.

    0.19.1 - 2022-12-13

    Compare with 0.19.0

    Bug Fixes

    Code Refactoring

    0.19.0 - 2022-05-28

    Compare with 0.18.1

    Highlights

    We decided to deprecate a few things to pave the way towards a more stable code base, bringing us closer to a v1.

    • Selection and rendering options are now combined into a single options key. Using the old keys will emit a deprecation warning.
    • The BaseCollector and BaseRenderer classes are deprecated in favor of BaseHandler, which merges their functionality. Using the old classes will emit a deprecation warning.

    New versions of the Python handler and the legacy Python handler were also released in coordination with mkdocstrings 0.19. See their respective changelogs: python, python-legacy. Most notably, the Python handler gained the members and filters options that prevented many users to switch to it.

    mkdocstrings stopped depending directly on the legacy Python handler. It means you now have to explicitely depend on it, directly or through the extra provided by mkdocstrings, if you want to continue using it.

    Packaging / Dependencies

    Features

    Code Refactoring

    • Support options / deprecated options mix-up (7c71f26 by Timothée Mazzucotelli).
    • Deprecate watch feature in favor of MkDocs' built-in one (c20022e by Timothée Mazzucotelli).
    • Log relative template paths if possible, instead of absolute (91f5f83 by Timothée Mazzucotelli).
    • Deprecate selection and rendering YAML keys (3335310 by Timothée Mazzucotelli). [PR #420](mkdocstrings/mkdocstrings#420)
    • Deprecate BaseCollector and BaseRenderer (eb822cb by Timothée Mazzucotelli). [PR #413](mkdocstrings/mkdocstrings#413)

    ... (truncated)

    Commits
    • d965ccc chore: Prepare release 0.19.1
    • 348bdd5 fix: Fix regular expression for Sphinx inventory parsing
    • a5ed211 chore: Add JSON schema for plugin's options
    • 6c3ef79 docs: Small improvement
    • 34a1512 chore: Template upgrade
    • eeeb97b chore: Template upgrade
    • 995e5dc docs: Remove mention of deprecated watch feature from recipes
    • 20f6ea4 Merge branch 'master' of github.com:mkdocstrings/mkdocstrings
    • efa00b2 docs: Clarify custom_templates folder location in options documentation
    • e2fb97b chore: Template upgrade
    • 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 
    opened by dependabot[bot] 0
Releases(v2.0.1)
  • v2.0.1(Dec 27, 2021)

    Version v2.0.1

    Features

    • Added Python 3.10 to CI & Updated the Docs (see #1160)
    • Enable mypy in CI (see #1101)
    • Synchronized reading the responses from a connection (see #1106)

    Fixes

    • Remove del from Redis (Fixes #1115) (see #1227)
    • fix socket.error raises (see #1129)
    • Fix buffer is closed error when using PythonParser class (see #1213)
    Source code(tar.gz)
    Source code(zip)
  • v2.0.0(Jul 30, 2021)

    Version 2.0 is a complete rewrite of aioredis. Starting with this version, aioredis now follows the API of redis-py, so you can easily adapt synchronous code that uses redis-py for async applications with aioredis-py.

    NOTE: This version is not compatible with earlier versions of aioredis. If you upgrade, you will need to make code changes.

    For more details, read our documentation on migrating to version 2.0.

    Source code(tar.gz)
    Source code(zip)
    aioredis-2.0.0-py3-none-any.whl(67.95 KB)
    aioredis-2.0.0.tar.gz(108.21 KB)
  • v1.3.1(Dec 2, 2019)

    Bugfixes

    • Fix transaction data decoding (see #657);
    • Fix duplicate calls to pool.wait_closed() upon create_pool() exception (see #671);

    Deprecations and Removals

    • Drop explicit loop requirement in API. Deprecate loop argument. Throw warning in Python 3.8+ if explicit loop is passed to methods (see #666).

    Misc

    • #643, #646, #648
    Source code(tar.gz)
    Source code(zip)
  • v1.2.0(Oct 24, 2018)

    NEW:

    • Implemented new Stream command support (see #299);

    • Reduce encode_command() cost about 60% (see #397);

    FIX:

    • Fix pipeline commands buffering was causing multiple sendto syscalls (see #464 and #473);

    • Python 3.7 compatibility fixes (see #426);

    • Fix typos in documentation (see #400);

    • Fix INFO command result parsing (see #405);

    • Fix bug in ConnectionsPool._drop_closed method (see #461);

    MISC:

    • Update dependencies versions;

    • Multiple tests improvements;

    Source code(tar.gz)
    Source code(zip)
  • v1.1.0(Feb 16, 2018)

    NEW:

    • Implement new commands: wait, touch, swapdb, unlink (see #376);

    • Add async_op argument to flushall and flushdb commands (see #364, and #370);

    FIX:

    • Important! Fix Sentinel sentinel client with pool minsize greater than 1 (see #380);

    • Fix SentinelPool.discover_timeout usage (see #379);

    • Fix Receiver hang on disconnect (see #354 and #366);

    • Fix an issue with subscribe/psubscribe with empty pool (see #351 and #355);

    • Fix an issue when StreamReader's feed_data is called before set_parser (see #347);

    MISC:

    • Update dependencies versions;

    • Multiple test fixes;

    Source code(tar.gz)
    Source code(zip)
  • v1.0.0(Nov 17, 2017)

    NEW:

    • Important! Drop Python 3.3, 3.4 support; (see #321, #323 and #326);

    • Important! Connections pool has been refactored; now create_redis function will yield Redis instance instead of RedisPool (see #129);

    • Important! Change sorted set commands reply format: return list of tuples instead of plain list for commands accepting withscores argument (see #334);

    • Important! Change hscan command reply format: return list of tuples instead of mixed key-value list (see #335);

    • Implement Redis URI support as supported address argument value (see #322);

    • Dropped create_reconnecting_redis, create_redis_pool should be used instead;

    • Implement custom StreamReader (see #273);

    • Implement Sentinel support (see #181);

    • Implement pure-python parser (see #212);

    • Add migrate_keys command (see #187);

    • Add zrevrangebylex command (see #201);

    • Add command, command_count, command_getkeys and command_info commands (see #229);

    • Add ping support in pubsub connection (see #264);

    • Add exist parameter to zadd command (see #288);

    • Add MaxClientsError and implement ReplyError specialization (see #325);

    • Add encoding parameter to sorted set commands (see #289);

    FIX:

    • Fix CancelledError in conn._reader_task (see #301);

    • Fix pending commands cancellation with CancelledError, use explicit exception instead of calling cancel() method (see #316);

    • Correct error message on Sentinel discovery of master/slave with password (see #327);

    • Fix bytearray support as command argument (see #329);

    • Fix critical bug in patched asyncio.Lock (see #256);

    • Fix Multi/Exec transaction canceled error (see #225);

    • Add missing arguments to create_redis and create_redis_pool;

    • Fix deprecation warning (see #191);

    • Make correct __aiter__() (see #192);

    • Backward compatibility fix for with (yield from pool) as conn: (see #205);

    • Fixed pubsub receiver stop() (see #211);

    MISC:

    • Multiple test fixes;

    • Add PyPy3 to build matrix;

    • Update dependencies versions;

    • Add missing Python 3.6 classifier;

    Source code(tar.gz)
    Source code(zip)
  • v0.3.5(Nov 8, 2017)

  • v0.3.4(Oct 25, 2017)

  • v1.0.0b2(Jun 30, 2017)

  • v0.3.3(Jun 30, 2017)

  • v1.0.0b1(Jun 30, 2017)

    New features:

    • Connection pool has been refactored; now create_redis will yield Redis instance instead of RedisPool (see #129);
    • Dropped create_reconnecting_redis, create_redis_pool should be used instead;
    • Implement Sentinel support (see #181);
    • Implement pure-python parser (see #212);
    • Add migrate_keys command (see #187);
    • Add zrevrangebylex command (see #201);
    • Add command, command_count, command_getkeys and comman_info commands (see #229);

    Fixed:

    • Multi/exec transaction canceled error (see #225);
    • Add missing arguments to create_redis and create_redis_pool;
    • Deprecation warning (see #191);
    • Make correct __aiter__() (see #192);
    • Backward compatibility fix for with (yield from pool) as conn (see #205);
    • Fixed pubsub receiver stop() (see #211);

    Misc:

    • Multiple test fixes;
    • Add PyPy3 to build matrix;
    Source code(tar.gz)
    Source code(zip)
  • v0.3.2(Jun 30, 2017)

    New:

    • Added zrevrangebylex command (see #201);
    • Add connection timeout (see #221);

    Fixed:

    • Pool close warning (see #239 and #236);
    • asyncio.Lock deadlock issue (see #231 and #241);
    Source code(tar.gz)
    Source code(zip)
  • v0.3.1(May 9, 2017)

  • v0.3.0(Jan 11, 2017)

    NEW:

    • Pub/Sub connection commands accept Channel instances (see #168);
    • Implement new Pub/Sub MPSC (multi-producers, single-consumer) Queue -- aioredis.pubsub.Receiver (see #176);
    • Add aioredis.abc module providing abstract base classes defining interface for basic lib components (see #176);
    • Implement Geo commands support (see #177 and #179);

    FIX:

    • Minor tests fixes;

    MISC:

    • Update examples and docs to use async/await syntax also keeping yield from examples for history (see #173);
    • Reflow Travis CI configuration; add Python 3.6 section (see #170);
    • Add AppVeyor integration to run tests on Windows (see #180);
    • Update multiple development requirements;
    Source code(tar.gz)
    Source code(zip)
  • v0.2.9(Oct 26, 2016)

    NEW:

    • Allow multiple keys in EXISTS command (see #156 and #157);

    FIX:

    • Close RedisPool when connection to Redis failed (see #136);
    • Add simple INFO command argument validation (see #140);
    • Remove invalid uses of next()

    MISC:

    • Update devel.rst docs; update Pub/Sub Channel docs (cross-refs);
    • Update MANIFEST.in to include docs, examples and tests in source bundle;
    Source code(tar.gz)
    Source code(zip)
  • v0.2.8(Jul 22, 2016)

    NEW:

    • Add hmset_dict command (see #130);
    • Add RedisConnection.address property;
    • RedisPool minsize/maxsize must not be None;
    • Implement close()/wait_closed()/closed interface for pool (see #128);

    FIX:

    • Add test for hstrlen;
    • Test fixes

    MISC:

    • Enable Redis 3.2.0 on Travis;
    • Add spell checking when building docs (see #132);
    • Documentation updated;
    Source code(tar.gz)
    Source code(zip)
  • v0.2.7(Jul 22, 2016)

    • create_pool() minsize default value changed to 1;
    • Fixed cancellation of wait_closed (see #118);
    • Fixed time() convertion to float (see #126);
    • Fixed hmset() method to return bool instead of b'OK' (see #126);
    • Fixed multi/exec + watch issue (changed watch variable was causing tr.execute() to fail) (see #121);
    • Replace asyncio.Future uses with utility method (get ready to Python 3.5.2 loop.create_future());
    • Tests switched from unittest to pytest (see #126);
    • Documentation updates;
    Source code(tar.gz)
    Source code(zip)
  • v0.2.6(Mar 30, 2016)

    Changes:

    • Fixed Multi/Exec transactions cancellation issue (see #110 and #114);
    • Fixed Pub/Sub subscribe concurrency issue (see #113 and #115);
    • Add SSL/TLS support (see #116);
    • aioredis.ConnectionClosedError raised in execute_pubsub as well (see #108);
    • Redis.slaveof() method signature changed: now to disable replication one should call redis.slaveof(None) instead of redis.slaveof();
    • More tests added;
    Source code(tar.gz)
    Source code(zip)
  • v0.2.5(Mar 2, 2016)

    Changes:

    • Close all Pub/Sub channels on connection close (see #88);
    • Add iter() method to aioredis.Channel allowing to use it with async for (see #89);
    • Inline code samples in docs made runnable and downloadable (see #92);
    • Python 3.5 examples converted to use async/await syntax (see #93);
    • Fix Multi/Exec to honor encoding parameter (see #94 and #97);
    • Add debug message in create_connection (see #90);
    • Replace asyncio.async calls with wrapper that respects asyncio version (see #101);
    • Use NODELAY option for TCP sockets (see #105);
    • New aioredis.ConnectionClosedError exception added. Raised if connection to Redis server is lost (see #108 and #109);
    • Fix RedisPool to close and drop connection in subscribe mode on release;
    • Fix aioredis.util.decode to recursively decode list responses;
    • More examples added and docs updated;
    • Add google groups link to README;
    • Bump year in LICENSE and docs;
    Source code(tar.gz)
    Source code(zip)
  • v0.2.4(Oct 13, 2015)

  • v0.2.2(Jul 7, 2015)

  • v0.2.1(Jul 6, 2015)

  • v0.1.4(Sep 22, 2014)

    Changes:

    • Dropped following Redis method -- Redis.multi(), Redis.exec(), Redis.discard()
    • Redis.multi_exec hack'ish property removed
    • Redis.multi_exec() method added
    • High-level commands implemented:
      • generic commands (tests);
      • transactions commands (api stabilization).
    • Backward incompatibilities:
      • Following sorted set commands' API changed: zcount, zrangebyscore, zremrangebyscore, zrevrangebyscore;
      • set string command' API changed;
    Source code(tar.gz)
    Source code(zip)
  • v0.1.3(Aug 8, 2014)

  • v0.1.2(Jul 31, 2014)

    Changes:

    • create_connection, create_pool, create_redis functions updated: db and password arguments made keyword-only (see #26);
    • Fixed transaction handling (see #32);
    • Response decoding (see #16);
    Source code(tar.gz)
    Source code(zip)
  • v0.1.1(Jul 7, 2014)

  • v0.1.0(Jun 24, 2014)

Owner
aio-libs
The set of asyncio-based libraries built with high quality
aio-libs
Python cluster client for the official redis cluster. Redis 3.0+.

redis-py-cluster This client provides a client for redis cluster that was added in redis 3.0. This project is a port of redis-rb-cluster by antirez, w

Grokzen 1.1k Jan 5, 2023
An asyncio compatible Redis driver, written purely in Python. This is really just a pet-project for me.

asyncredis An asyncio compatible Redis driver. Just a pet-project. Information asyncredis is, like I've said above, just a pet-project for me. I reall

Vish M 1 Dec 25, 2021
Redis Python Client

redis-py The Python interface to the Redis key-value store. Python 2 Compatibility Note redis-py 3.5.x will be the last version of redis-py that suppo

Andy McCurdy 11k Dec 29, 2022
A tiny python web application based on Flask to set, get, expire, delete keys of Redis database easily with direct link at the browser.

First Redis Python (CRUD) A tiny python web application based on Flask to set, get, expire, delete keys of Redis database easily with direct link at t

Max Base 9 Dec 24, 2022
Motor - the async Python driver for MongoDB and Tornado or asyncio

Motor Info: Motor is a full-featured, non-blocking MongoDB driver for Python Tornado and asyncio applications. Documentation: Available at motor.readt

mongodb 2.1k Dec 26, 2022
A fast PostgreSQL Database Client Library for Python/asyncio.

asyncpg -- A fast PostgreSQL Database Client Library for Python/asyncio asyncpg is a database interface library designed specifically for PostgreSQL a

magicstack 5.8k Dec 31, 2022
aiopg is a library for accessing a PostgreSQL database from the asyncio

aiopg aiopg is a library for accessing a PostgreSQL database from the asyncio (PEP-3156/tulip) framework. It wraps asynchronous features of the Psycop

aio-libs 1.3k Jan 3, 2023
aiomysql is a library for accessing a MySQL database from the asyncio

aiomysql aiomysql is a "driver" for accessing a MySQL database from the asyncio (PEP-3156/tulip) framework. It depends on and reuses most parts of PyM

aio-libs 1.5k Jan 3, 2023
aioodbc - is a library for accessing a ODBC databases from the asyncio

aioodbc aioodbc is a Python 3.5+ module that makes it possible to access ODBC databases with asyncio. It relies on the awesome pyodbc library and pres

aio-libs 253 Dec 31, 2022
Motor - the async Python driver for MongoDB and Tornado or asyncio

Motor Info: Motor is a full-featured, non-blocking MongoDB driver for Python Tornado and asyncio applications. Documentation: Available at motor.readt

mongodb 1.6k Feb 6, 2021
CouchDB client built on top of aiohttp (asyncio)

aiocouchdb source: https://github.com/aio-libs/aiocouchdb documentation: http://aiocouchdb.readthedocs.org/en/latest/ license: BSD CouchDB client buil

aio-libs 53 Apr 5, 2022
asyncio compatible driver for elasticsearch

asyncio client library for elasticsearch aioes is a asyncio compatible library for working with Elasticsearch The project is abandoned aioes is not su

null 97 Sep 5, 2022
Asynchronous interface for peewee ORM powered by asyncio

peewee-async Asynchronous interface for peewee ORM powered by asyncio. Important notes Since version 0.6.0a only peewee 3.5+ is supported If you still

05Bit 666 Dec 30, 2022
GINO Is Not ORM - a Python asyncio ORM on SQLAlchemy core.

GINO - GINO Is Not ORM - is a lightweight asynchronous ORM built on top of SQLAlchemy core for Python asyncio. GINO 1.0 supports only PostgreSQL with

GINO Community 2.5k Dec 27, 2022
Familiar asyncio ORM for python, built with relations in mind

Tortoise ORM Introduction Tortoise ORM is an easy-to-use asyncio ORM (Object Relational Mapper) inspired by Django. Tortoise ORM was build with relati

Tortoise 3.3k Dec 31, 2022
MySQL database connector for Python (with Python 3 support)

mysqlclient This project is a fork of MySQLdb1. This project adds Python 3 support and fixed many bugs. PyPI: https://pypi.org/project/mysqlclient/ Gi

PyMySQL 2.2k Dec 25, 2022
ClickHouse Python Driver with native interface support

ClickHouse Python Driver ClickHouse Python Driver with native (TCP) interface support. Asynchronous wrapper is available here: https://github.com/myma

Marilyn System 957 Dec 30, 2022
Async database support for Python. 🗄

Databases Databases gives you simple asyncio support for a range of databases. It allows you to make queries using the powerful SQLAlchemy Core expres

Encode 3.2k Dec 30, 2022
MySQL database connector for Python (with Python 3 support)

mysqlclient This project is a fork of MySQLdb1. This project adds Python 3 support and fixed many bugs. PyPI: https://pypi.org/project/mysqlclient/ Gi

PyMySQL 2.2k Dec 25, 2022