GithubHelp home page GithubHelp logo

Comments (3)

waketzheng avatar waketzheng commented on May 26, 2024 1

For why it raises KeyError instead of TypeError with Python<3.12, see this: https://stackoverflow.com/questions/78427983/why-does-dictid-1-id-2-sometimes-raise-keyerror-id-instead-of-a

from tortoise-orm.

waketzheng avatar waketzheng commented on May 26, 2024

I got different errors with the following code snippet:

import uuid

from tortoise import Tortoise, fields, run_async
from tortoise.models import Model


class Faqs(Model):
    id = fields.UUIDField(pk=True)
    question = fields.TextField(null=True)


async def run():
    await Tortoise.init(db_url="sqlite://:memory:", modules={"models": ["__main__"]})
    await Tortoise.generate_schemas()

    faq, _ = await Faqs.get_or_create(id="6aadafff-e0b9-497b-aeb2-65498a35b6f5")
    # modify question
    faq.question = "q111234"
    # assign new id
    faq.id = uuid.uuid4()
    # update_or_create, KeyError
    new_faq, created = await Faqs.update_or_create(id=faq.id, defaults=dict(faq))
    print(dict(new_faq), created)


if __name__ == "__main__":
    run_async(run())

ERROR is:

Traceback (most recent call last):
  File "/home/wenping/github/tortoise-orm/tortoise/models.py", line 1079, in get_or_create
    await cls.select_for_update().filter(**kwargs).using_db(connection).get(),
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/wenping/github/tortoise-orm/tortoise/queryset.py", line 1074, in _execute
    raise DoesNotExist("Object does not exist")
tortoise.exceptions.DoesNotExist: Object does not exist

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/wenping/github/tortoise-orm/examples/fastapi/run.py", line 27, in <module>
    run_async(run())
  File "/home/wenping/github/tortoise-orm/tortoise/__init__.py", line 688, in run_async
    loop.run_until_complete(coro)
  File "/usr/local/lib/python3.12/asyncio/base_events.py", line 685, in run_until_complete
    return future.result()
           ^^^^^^^^^^^^^^^
  File "/home/wenping/github/tortoise-orm/examples/fastapi/run.py", line 22, in run
    new_faq, created = await Faqs.update_or_create(id=faq.id, defaults=dict(faq))
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/wenping/github/tortoise-orm/tortoise/models.py", line 1129, in update_or_create
    return await cls.get_or_create(defaults, db, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/wenping/github/tortoise-orm/tortoise/models.py", line 1084, in get_or_create
    return await cls.create(using_db=connection, **defaults, **kwargs), True
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: tortoise.models.Model.create() got multiple values for keyword argument 'id'

from tortoise-orm.

waketzheng avatar waketzheng commented on May 26, 2024

After change the Python version to 3.10, got the KeyError:

Traceback (most recent call last):
  File "/home/wenping/github/tortoise-orm/tortoise/models.py", line 1079, in get_or_create
    await cls.select_for_update().filter(**kwargs).using_db(connection).get(),
  File "/home/wenping/github/tortoise-orm/tortoise/queryset.py", line 1074, in _execute
    raise DoesNotExist("Object does not exist")
tortoise.exceptions.DoesNotExist: Object does not exist

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/wenping/github/tortoise-orm/examples/fastapi/run.py", line 27, in <module>
    run_async(run())
  File "/home/wenping/github/tortoise-orm/tortoise/__init__.py", line 688, in run_async
    loop.run_until_complete(coro)
  File "/home/wenping/.pyenv/versions/3.10.2/lib/python3.10/asyncio/base_events.py", line 641, in run_until_complete
    return future.result()
  File "/home/wenping/github/tortoise-orm/examples/fastapi/run.py", line 22, in run
    new_faq, created = await Faqs.update_or_create(id=faq.id, defaults=dict(faq))
  File "/home/wenping/github/tortoise-orm/tortoise/models.py", line 1129, in update_or_create
    return await cls.get_or_create(defaults, db, **kwargs)
  File "/home/wenping/github/tortoise-orm/tortoise/models.py", line 1084, in get_or_create
    return await cls.create(using_db=connection, **defaults, **kwargs), True
KeyError: 'id'

from tortoise-orm.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.