grigi: @abondar based this on your original attempt to fix this. Please review.
coveralls: ## Pull Request Test Coverage Report for [Build 1330](https://coveralls.io/builds/29025873)

* **27** of **28**   **(96.43%)**  changed or added relevant lines in **4** files are covered.
* No unchanged relevant lines lost coverage.
* Overall coverage decreased (**-0.1%**) to **97.959%**

---

|  Changes Missing Coverage | Covered Lines | Changed/Added Lines | % |
| :-----|--------------|--------|---: |
| [tortoise/models.py](https://coveralls.io/builds/29025873/source?filename=tortoise%2Fmodels.py#L766) | 13 | 14 | 92.86%
<!-- | **Total:** | **27** | **28** | **96.43%** | -->


|  Totals | [![Coverage Status](https://coveralls.io/builds/29025873/badge)](https://coveralls.io/builds/29025873) |
| :-- | --: |
| Change from base [Build 1324](https://coveralls.io/builds/28992811): |  -0.1% |
| Covered Lines: | 3516 |
| Relevant Lines: | 3551 |

---
##### 💛  - [Coveralls](https://coveralls.io)

grigi: Wow, Py3.6 gets so confused with contexts :sob: 
I feel we may just have to remove it from CI altogether...
It has been deprecated for a few months now...

Unfortunately it would mean dropping pypy too.

I'll just conditionally skip the test for now.
grigi: Another option is to disable all connection pooling on py3.6?
AEnterprise: wow didn't expect pooling to be such a major pain on 3.6

but personally i'm more in favor for dropping only specific features like pooling then dropping an entire version (prob best to log a warning on startup though so people are aware)
grigi: Py3.6 uses a contextvar backport, and unfortunately it has shortcomings. py3.7+ has extra state in their asyncio C-structs to keep track better.
I'm busy seeing what would be the lowest-impact change for disabling pooling for py3.6. It seems forcing a pool of 1 doesn't do it.
I suspect I would have to use explicit locking like I do for SQLite to get it working right.

AEnterprise: i think forcing a shared lock instead of making new locks for concurrent operations should do the trick

that and forcing a poolsize of 1 regardless since it can't use multiple so there is no reason to have any extras open
grigi: Well, in the meantime I'm getting hillarious errors, like "cannot rollback; the transaction is not yet started" but investigating further the cause is the dreaded "cannot perform operation: another operation is in progress".

And fixing race conditions fixes that. 
grigi: @AEnterprise We are discussing the potential deprecation for py3.6 in #303
This PR fixes a bug, and should go in soon.
I'll merge this to master instead of develop, and cherry-pick the windows fix as well and release that. All the new feature work is going in as v0.16
grigi: I'll cherry pick the commits instead.
diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index 19d7564..7f9034b 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -74,6 +74,7 @@ future
 
 - Fix default type of ``JSONField``
 - Install on Windows does not require a C compiler any more.
+- Fix ``IntegrityError`` with unique field and ``get_or_create``
 
 0.15.17
 -------
diff --git a/tortoise/backends/asyncpg/client.py b/tortoise/backends/asyncpg/client.py
index 470c7db..d78f329 100644
--- a/tortoise/backends/asyncpg/client.py
+++ b/tortoise/backends/asyncpg/client.py
@@ -13,7 +13,7 @@ from tortoise.backends.base.client import (
     BaseTransactionWrapper,
     Capabilities,
     ConnectionWrapper,
-    NestedTransactionContext,
+    NestedTransactionPooledContext,
     PoolConnectionWrapper,
     TransactionContext,
     TransactionContextPooled,
@@ -192,6 +192,7 @@ class TransactionWrapper(AsyncpgDBClient, BaseTransactionWrapper):
     def __init__(self, connection: AsyncpgDBClient) -> None:
         self._connection: asyncpg.Connection = connection._connection
         self._lock = asyncio.Lock()
+        self._trxlock = asyncio.Lock()
         self.log = connection.log
         self.connection_name = connection.connection_name
         self.transaction: Transaction = None
@@ -199,7 +200,7 @@ class TransactionWrapper(AsyncpgDBClient, BaseTransactionWrapper):
         self._parent = connection
 
     def _in_transaction(self) -> "TransactionContext":
-        return NestedTransactionContext(self)
+        return NestedTransactionPooledContext(self)
 
     def acquire_connection(self) -> "ConnectionWrapper":
         return ConnectionWrapper(self._connection, self._lock)
diff --git a/tortoise/backends/base/client.py b/tortoise/backends/base/client.py
index bb1fd72..69ed9ca 100644
--- a/tortoise/backends/base/client.py
+++ b/tortoise/backends/base/client.py
@@ -268,7 +268,6 @@ class TransactionContextPooled(TransactionContext):
 
 class NestedTransactionContext(TransactionContext):
     async def __aenter__(self):
-        await self.connection.start()
         return self.connection
 
     async def __aexit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None:
@@ -277,8 +276,20 @@ class NestedTransactionContext(TransactionContext):
                 # Can't rollback a transaction that already failed.
                 if exc_type is not TransactionManagementError:
                     await self.connection.rollback()
-            else:
-                await self.connection.commit()
+
+
+class NestedTransactionPooledContext(TransactionContext):
+    async def __aenter__(self):
+        await self.lock.acquire()
+        return self.connection
+
+    async def __aexit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> None:
+        self.lock.release()
+        if not self.connection._finalized:
+            if exc_type:
+                # Can't rollback a transaction that already failed.
+                if exc_type is not TransactionManagementError:
+                    await self.connection.rollback()
 
 
 class PoolConnectionWrapper:
diff --git a/tortoise/backends/mysql/client.py b/tortoise/backends/mysql/client.py
index ecb7ca4..49963c5 100644
--- a/tortoise/backends/mysql/client.py
+++ b/tortoise/backends/mysql/client.py
@@ -12,7 +12,7 @@ from tortoise.backends.base.client import (
     BaseTransactionWrapper,
     Capabilities,
     ConnectionWrapper,
-    NestedTransactionContext,
+    NestedTransactionPooledContext,
     PoolConnectionWrapper,
     TransactionContext,
     TransactionContextPooled,
@@ -208,13 +208,14 @@ class TransactionWrapper(MySQLClient, BaseTransactionWrapper):
         self.connection_name = connection.connection_name
         self._connection: aiomysql.Connection = connection._connection
         self._lock = asyncio.Lock()
+        self._trxlock = asyncio.Lock()
         self.log = connection.log
         self._finalized: Optional[bool] = None
         self.fetch_inserted = connection.fetch_inserted
         self._parent = connection
 
     def _in_transaction(self) -> "TransactionContext":
-        return NestedTransactionContext(self)
+        return NestedTransactionPooledContext(self)
 
     def acquire_connection(self) -> ConnectionWrapper:
         return ConnectionWrapper(self._connection, self._lock)
diff --git a/tortoise/models.py b/tortoise/models.py
index 377a001..b5169df 100644
--- a/tortoise/models.py
+++ b/tortoise/models.py
@@ -7,7 +7,12 @@ from typing import Any, Awaitable, Dict, Generator, List, Optional, Set, Tuple,
 from pypika import Order, Query, Table
 
 from tortoise.backends.base.client import BaseDBAsyncClient
-from tortoise.exceptions import ConfigurationError, OperationalError
+from tortoise.exceptions import (
+    ConfigurationError,
+    IntegrityError,
+    OperationalError,
+    TransactionManagementError,
+)
 from tortoise.fields.base import Field
 from tortoise.fields.data import IntField
 from tortoise.fields.relational import (
@@ -22,7 +27,7 @@ from tortoise.fields.relational import (
 from tortoise.filters import get_filters_for_field
 from tortoise.functions import Function
 from tortoise.queryset import Q, QuerySet, QuerySetSingle
-from tortoise.transactions import current_transaction_map
+from tortoise.transactions import current_transaction_map, in_transaction
 
 MODEL = TypeVar("MODEL", bound="Model")
 # TODO: Define Filter type object. Possibly tuple?
@@ -752,10 +757,18 @@ class Model(metaclass=ModelMeta):
         """
         if not defaults:
             defaults = {}
-        instance = await cls.filter(**kwargs).first()
-        if instance:
-            return instance, False
-        return await cls.create(**defaults, **kwargs, using_db=using_db), True
+        db = using_db if using_db else cls._meta.db
+        async with in_transaction(connection_name=db.connection_name):
+            instance = await cls.filter(**kwargs).first()
+            if instance:
+                return instance, False
+            try:
+                return await cls.create(**defaults, **kwargs), True
+            except (IntegrityError, TransactionManagementError):
+                # Let transaction close
+                pass
+        # Try after transaction in case transaction error
+        return await cls.get(**kwargs), False
 
     @classmethod
     async def create(cls: Type[MODEL], **kwargs: Any) -> MODEL:

IntegrityError with unique field and get_or_create
**Describe the bug**
Hi!
First of all thank you for developing such useful ORM.
I am not sure that this is really bug, maybe I am doing something wrong.
I get IntegrityError with fields having unique=True and using get_or_create.

**To Reproduce**
Models.py is:

    class CheckDates(Model):
        id = fields.IntField(pk=True)
        check_date = fields.DateField(unique=True)

        def __str__(self):
            return self.check_date.strftime('%Y-%m-%d')

    class Projects(Model):
        id = fields.IntField(pk=True)
        name = fields.CharField(max_length=255, unique=True)

        def __str__(self):
            return self.name

    class Results(Model):
        id = fields.IntField(pk=True)
        date = fields.ForeignKeyField('models.CheckDates', related_name='results')
        project = fields.ForeignKeyField('models.Projects', related_name='results')
        suspicious_url = fields.CharField(max_length=255)

        class Meta:
            unique_together = ('date', 'project', 'suspicious_url')

        def __str__(self):
            return self.suspicious_url


I have file for generating schemas:

    from tortoise import Tortoise, run_async


    async def init(generate=False):
        await Tortoise.init(
            db_url='sqlite://db.sqlite3',
            modules={'models': ['AntiDoorway.models']}
        )
        if generate:
            await generate_schemas()

    async def generate_schemas():
        await Tortoise.generate_schemas()

    async def close_conns():
        await Tortoise.close_connections()

    if __name__ == '__main__':
        run_async(init(generate=True))


And file with main pipeline (some code is excluded as irrelevant):
    
    def check_by_visiting(urls_dict: dict, project_name: str, check_date: date, counter_id: int) -> None:
        tasks = []
        loop = asyncio.get_event_loop()
        loop.run_until_complete(init())
        for url in urls_dict.keys():
            for platform in platforms:
                tasks.append(loop.create_task(main(url, project_name, check_date, counter_id, platform)))
        loop.run_until_complete(asyncio.wait(tasks))
        loop.run_until_complete(close_conns())
        loop.close()

    async def main(url: str, project_name: str, check_date: date, counter_id: int, platform: str) -> None:
        result = []
        try:
            date_id = await CheckDates.get_or_create(check_date=check_date)
        except exceptions.IntegrityError:
            date_id = await CheckDates.filter(check_date=check_date)
        date_id = date_id[0]
        project_id = await Projects.get_or_create(name=project_name)
        project_id = project_id[0]

        params = await form_request_params(platform)
        formed_url = await form_url(url)
        async with aiohttp.ClientSession() as session:
            try:
                response = await fetch_data(formed_url, params, session)
            except Exception as e:
                response = ''
        result.append(await check_counter_presence(response, counter_id))
        result.append(await return_reload_in_header(response))
        if any(result):
            try:
                await Results.get_or_create(date=date_id, project=project_id, suspicious_url=url)
            except (sqlite3.IntegrityError, exceptions.IntegrityError):
                pass

I get following errors when I run script with empty DB:
sqlite3.IntegrityError: UNIQUE constraint failed: checkdates.check_date
and
sqlite3.IntegrityError: UNIQUE constraint failed: results.date_id, results.project_id, results.suspicious_url
but all data is saved (well, I hope it is).
And no errors if date is already in DB.

**Expected behavior**
No error messages.

**Additional context**
So this might be a bug if I'm doing it right.
diff --git a/tests/test_concurrency.py b/tests/test_concurrency.py
index c6bdc37..405491e 100644
--- a/tests/test_concurrency.py
+++ b/tests/test_concurrency.py
@@ -29,7 +29,7 @@ class TestConcurrencyIsolated(test.IsolatedTestCase):
         for una in unas:
             self.assertEqual(una[0], unas[0][0])
 
-    @test.expectedFailure
+    @test.skipIf(sys.version_info < (3, 7), "aiocontextvars backport not handling this well")
     async def test_concurrent_get_or_create(self):
         unas = await asyncio.gather(*[UniqueName.get_or_create(name="d") for _ in range(10)])
         una_created = [una[1] for una in unas if una[1] is True]
@@ -76,7 +76,7 @@ class TestConcurrencyTransactioned(test.TestCase):
         for una in unas:
             self.assertEqual(una[0], unas[0][0])
 
-    @test.skip("Crashes with MySQL & PostgreSQL")
+    @test.skipIf(sys.version_info < (3, 7), "aiocontextvars backport not handling this well")
     async def test_concurrent_get_or_create(self):
         unas = await asyncio.gather(*[UniqueName.get_or_create(name="b") for _ in range(10)])
         una_created = [una[1] for una in unas if una[1] is True]
diff --git a/tests/test_queryset.py b/tests/test_queryset.py
index 348bccf..3dd23c2 100644
--- a/tests/test_queryset.py
+++ b/tests/test_queryset.py
@@ -1,5 +1,3 @@
-import sys
-
 from tests.testmodels import IntFields, MinRelation, Tournament
 from tortoise.contrib import test
 from tortoise.exceptions import DoesNotExist, FieldError, IntegrityError, MultipleObjectsReturned
@@ -278,7 +276,6 @@ class TestQueryset(test.TestCase):
         ):
             await IntFields.all().values_list(flat=True)
 
-    @test.skipIf(sys.version_info < (3, 6), "Class fields not sorted in 3.5")
     async def test_all_values_list(self):
         data = await IntFields.all().order_by("id").values_list()
         self.assertEqual(data[2], (self.intfields[2].id, 16, None))

pip install -e .
parse_log_pytest
requirements.txt
pytest pytest-cov pytest-xdist pytest-mock pytest-asyncio
3.7
tests/requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
aiofiles==0.4.0
aiomysql==0.0.20
aiosqlite==0.11.0
alabaster==0.7.12
apipkg==1.5
appdirs==1.4.3
astroid==2.3.3
asyncpg==0.20.1
asynctest==0.13.0
attrs==19.3.0
Babel==2.8.0
bandit==1.6.2
black==19.10b0
bleach==3.1.1
blinker==1.4
certifi==2019.11.28
cffi==1.14.0
chardet==3.0.4
ciso8601==2.1.3
Click==7.0
cloud-sptheme==1.10.0
colorama==0.4.3
coverage==5.0.3
coveralls==1.11.1
cryptography==2.8
distlib==0.3.0
docopt==0.6.2
docutils==0.16
entrypoints==0.3
exceptiongroup==1.2.2
execnet==1.7.1
filelock==3.0.12
flake8==3.7.9
flake8-isort==2.8.0
gitdb==4.0.2
GitPython==3.1.0
green==3.1.0
h11==0.8.1
h2==3.2.0
hpack==3.0.0
hstspreload==2020.2.25
httptools==0.1.1
httpx==0.9.3
Hypercorn==0.9.1
hyperframe==5.2.0
idna==2.9
imagesize==1.2.0
importlib-metadata==1.5.0
iniconfig==2.0.0
iso8601==0.1.12
isort==4.3.21
itsdangerous==1.1.0
Jinja2==2.11.1
lazy-object-proxy==1.4.3
lxml==4.5.0
MarkupSafe==1.1.1
mccabe==0.6.1
more-itertools==8.2.0
multidict==4.7.5
mypy==0.761
mypy-extensions==0.4.3
nose2==0.9.2
packaging==20.1
pathspec==0.7.0
pbr==5.4.4
pip-tools==4.5.0
pkginfo==1.5.0.1
pluggy==0.13.1
priority==1.3.0
py==1.8.1
pycodestyle==2.5.0
pycparser==2.19
pyflakes==2.1.1
Pygments==2.5.2
pylint==2.4.4
PyMySQL==0.9.2
pyparsing==2.4.6
PyPika==0.35.21
pytest==7.4.4
pytest-asyncio==0.21.2
pytest-cov==2.8.1
pytest-forked==1.1.3
pytest-mock==3.11.1
pytest-xdist==1.31.0
python-rapidjson==0.9.1
pytz==2019.3
PyYAML==5.3
Quart==0.11.3
readme-renderer==24.0
regex==2020.2.20
requests==2.23.0
requests-toolbelt==0.9.1
rfc3986==1.3.2
sanic==19.12.2
six==1.14.0
smmap==3.0.1
sniffio==1.1.0
snowballstemmer==2.0.0
Sphinx==1.8.5
sphinxcontrib-websupport==1.2.0
starlette==0.13.2
stevedore==1.32.0
testfixtures==6.14.0
toml==0.10.0
tomli==2.0.1
-e git+https://github.com/tortoise/tortoise-orm.git@45ee1d164676f03859750c6ab4231e18aae85ab8#egg=tortoise_orm
tox==3.14.5
tqdm==4.43.0
twine==1.15.0
typed-ast==1.4.1
typing-extensions==3.7.4.1
ujson==1.35
Unidecode==1.1.1
urllib3==1.25.8
uvicorn==0.11.3
uvloop==0.14.0
virtualenv==20.0.7
wcwidth==0.1.8
webencodings==0.5.1
websockets==8.1
Werkzeug==1.0.0
wrapt==1.11.2
wsproto==0.15.0
zipp==3.0.0

name: tortoise-orm
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=22.3.1=py37h06a4308_0
  - python=3.7.16=h7a1cb2a_0
  - readline=8.2=h5eee18b_0
  - setuptools=65.6.3=py37h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.38.4=py37h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - aiofiles==0.4.0
      - aiomysql==0.0.20
      - aiosqlite==0.11.0
      - alabaster==0.7.12
      - apipkg==1.5
      - appdirs==1.4.3
      - astroid==2.3.3
      - asyncpg==0.20.1
      - asynctest==0.13.0
      - attrs==19.3.0
      - babel==2.8.0
      - bandit==1.6.2
      - black==19.10b0
      - bleach==3.1.1
      - blinker==1.4
      - certifi==2019.11.28
      - cffi==1.14.0
      - chardet==3.0.4
      - ciso8601==2.1.3
      - click==7.0
      - cloud-sptheme==1.10.0
      - colorama==0.4.3
      - coverage==5.0.3
      - coveralls==1.11.1
      - cryptography==2.8
      - distlib==0.3.0
      - docopt==0.6.2
      - docutils==0.16
      - entrypoints==0.3
      - exceptiongroup==1.2.2
      - execnet==1.7.1
      - filelock==3.0.12
      - flake8==3.7.9
      - flake8-isort==2.8.0
      - gitdb==4.0.2
      - gitpython==3.1.0
      - green==3.1.0
      - h11==0.8.1
      - h2==3.2.0
      - hpack==3.0.0
      - hstspreload==2020.2.25
      - httptools==0.1.1
      - httpx==0.9.3
      - hypercorn==0.9.1
      - hyperframe==5.2.0
      - idna==2.9
      - imagesize==1.2.0
      - importlib-metadata==1.5.0
      - iniconfig==2.0.0
      - iso8601==0.1.12
      - isort==4.3.21
      - itsdangerous==1.1.0
      - jinja2==2.11.1
      - lazy-object-proxy==1.4.3
      - lxml==4.5.0
      - markupsafe==1.1.1
      - mccabe==0.6.1
      - more-itertools==8.2.0
      - multidict==4.7.5
      - mypy==0.761
      - mypy-extensions==0.4.3
      - nose2==0.9.2
      - packaging==20.1
      - pathspec==0.7.0
      - pbr==5.4.4
      - pip-tools==4.5.0
      - pkginfo==1.5.0.1
      - pluggy==0.13.1
      - priority==1.3.0
      - py==1.8.1
      - pycodestyle==2.5.0
      - pycparser==2.19
      - pyflakes==2.1.1
      - pygments==2.5.2
      - pylint==2.4.4
      - pymysql==0.9.2
      - pyparsing==2.4.6
      - pypika==0.35.21
      - pytest==7.4.4
      - pytest-asyncio==0.21.2
      - pytest-cov==2.8.1
      - pytest-forked==1.1.3
      - pytest-mock==3.11.1
      - pytest-xdist==1.31.0
      - python-rapidjson==0.9.1
      - pytz==2019.3
      - pyyaml==5.3
      - quart==0.11.3
      - readme-renderer==24.0
      - regex==2020.2.20
      - requests==2.23.0
      - requests-toolbelt==0.9.1
      - rfc3986==1.3.2
      - sanic==19.12.2
      - six==1.14.0
      - smmap==3.0.1
      - sniffio==1.1.0
      - snowballstemmer==2.0.0
      - sphinx==1.8.5
      - sphinxcontrib-websupport==1.2.0
      - starlette==0.13.2
      - stevedore==1.32.0
      - testfixtures==6.14.0
      - toml==0.10.0
      - tomli==2.0.1
      - tox==3.14.5
      - tqdm==4.43.0
      - twine==1.15.0
      - typed-ast==1.4.1
      - typing-extensions==3.7.4.1
      - ujson==1.35
      - unidecode==1.1.1
      - urllib3==1.25.8
      - uvicorn==0.11.3
      - uvloop==0.14.0
      - virtualenv==20.0.7
      - wcwidth==0.1.8
      - webencodings==0.5.1
      - websockets==8.1
      - werkzeug==1.0.0
      - wrapt==1.11.2
      - wsproto==0.15.0
      - zipp==3.0.0
prefix: /opt/conda/envs/tortoise-orm

tests/test_concurrency.py::TestConcurrencyIsolated::test_concurrent_get_or_create tests/test_concurrency.py::TestConcurrencyTransactioned::test_concurrent_get_or_create
tests/test_queryset.py::TestQueryset::test_all_flat_values_list tests/test_queryset.py::TestQueryset::test_all_values_list tests/test_queryset.py::TestQueryset::test_duplicate_values tests/test_queryset.py::TestQueryset::test_all_count tests/test_queryset.py::TestQueryset::test_bad_values_list tests/test_queryset.py::TestQueryset::test_modify_dataset tests/test_queryset.py::TestQueryset::test_duplicate_values_kw tests/test_queryset.py::TestQueryset::test_delete tests/test_queryset.py::TestQueryset::test_distinct tests/test_queryset.py::TestQueryset::test_offset_count tests/test_queryset.py::TestQueryset::test_duplicate_values_list tests/test_queryset.py::TestQueryset::test_update_pk tests/test_concurrency.py::TestConcurrencyTransactioned::test_concurrency_read tests/test_queryset.py::TestQueryset::test_limit_count tests/test_queryset.py::TestQueryset::test_join_count tests/test_queryset.py::TestQueryset::test_async_iter tests/test_queryset.py::TestQueryset::test_many_flat_values_list tests/test_queryset.py::TestQueryset::test_bad_ordering tests/test_queryset.py::TestQueryset::test_first tests/test_queryset.py::TestQueryset::test_update_f_expression tests/test_queryset.py::TestQueryset::test_order_by_bad_value tests/test_queryset.py::TestQueryset::test_update_basic tests/test_queryset.py::TestQueryset::test_bad_values tests/test_queryset.py::TestQueryset::test_get_or_none tests/test_queryset.py::TestQueryset::test_all_values tests/test_queryset.py::TestQueryset::test_limit_offset_values tests/test_queryset.py::TestQueryset::test_duplicate_values_kw_badmap tests/test_concurrency.py::TestConcurrencyIsolated::test_nonconcurrent_get_or_create tests/test_concurrency.py::TestConcurrencyTransactioned::test_nonconcurrent_get_or_create tests/test_concurrency.py::TestConcurrencyIsolated::test_concurrency_read tests/test_queryset.py::TestQueryset::test_update_virtual tests/test_queryset.py::TestQueryset::test_get tests/test_concurrency.py::TestConcurrencyTransactioned::test_concurrency_create tests/test_queryset.py::TestQueryset::test_update_badparam tests/test_queryset.py::TestQueryset::test_limit_offset_values_list tests/test_concurrency.py::TestConcurrencyIsolated::test_concurrency_create tests/test_concurrency.py::TestConcurrencyIsolated::test_concurrency_transactions tests/test_concurrency.py::TestConcurrencyIsolated::test_concurrency_transactions_concurrent
tortoise/backends/base/client.py tortoise/models.py tortoise/backends/asyncpg/client.py CHANGELOG.rst tortoise/backends/mysql/client.py
tortoise/backends/base/client.py tortoise/models.py tortoise/backends/asyncpg/client.py CHANGELOG.rst tortoise/backends/mysql/client.py