«Ошибка типа: аргумент типа «метод» не повторяется» при инициализации объекта ORM SQLAlchemyPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 «Ошибка типа: аргумент типа «метод» не повторяется» при инициализации объекта ORM SQLAlchemy

Сообщение Anonymous »

У меня есть ORM SQLAlchemy с SqlAlchemy 2.0, использующим mapped_column() и Deklarative Base. Мое приложение начинается с сокола и пушки в моем венве PyCharm с Python3.12.
Таблицы базы данных создаются правильно с помощью models.Base.metadata.create_all(self.engine)
У меня есть PostgresDB, и все таблицы со столбцами созданы правильно, также создание записи вручную работает нормально.
Но создание записи с помощью SQLAlchemy Объект init завершается с ошибкой, и возникает непонятная мне ошибка.

Код: Выделить всё

from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship

class Base(DeclarativeBase):
pass

class VirtualMachine(Base):
__tablename__ = "virtual_machine"

vm_id: Mapped[int] = mapped_column(primary_key=True)
object_name: Mapped[str] = mapped_column()

def __init__(self, object_name: str):
self.vm_id = 1
self.object_name = object_name
Я не впервые использую SQLAlchemy ORM для управления базами данных,
но я не понимаю, что означает это сообщение об ошибке при попытке создайте объект «Виртуальная машина» в моих модульных тестах.

Код: Выделить всё

class TestVM(unittest.TestCase):
def setUp(self):
self.data = {
"object_name": "test-vm"
}
engine = sqlalchemy.create_engine(connect_str)
self.db = engine.connect()

def test_create_vm(self):
self.test_vm = VirtualMachine(**self.data)

Код: Выделить всё

Error
Traceback (most recent call last):
File "/api/tests/orm_test/vm_object_test.py", line 51, in test_create_vm
self.test_vm = VirtualMachine(**self.data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "", line 4, in __init__
File "/api/venv/lib64/python3.12/site-packages/sqlalchemy/orm/state.py", line 571, in _initialize_instance
with util.safe_reraise():
File "/api/venv/lib64/python3.12/site-packages/sqlalchemy/util/langhelpers.py", line 146, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/api/venv/lib64/python3.12/site-packages/sqlalchemy/orm/state.py", line 569, in _initialize_instance
manager.original_init(*mixed[1:], **kwargs)
File "/api/src/database/models.py", line 58, in __init__
self.vm_id = 1
^^^^^^^^^^
File "/api/venv/lib64/python3.12/site-packages/sqlalchemy/orm/attributes.py", line 537, in __set__
self.impl.set(
File "/api/venv/lib64/python3.12/site-packages/sqlalchemy/orm/attributes.py", line 1272, in set
old = self.get(state, dict_, PASSIVE_RETURN_NO_VALUE)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "api/venv/lib64/python3.12/site-packages/sqlalchemy/orm/attributes.py", line 1074, in get
if self.key in dict_:
^^^^^^^^^^^^^^^^^
TypeError: argument of type 'method' is not iterable
У кого-нибудь есть идеи, почему его нельзя правильно инициализировать?
Я также пробовал с другими типами данных, потому что вначале у меня был uuid .UUID как Mapped[type]
и у меня был встроен asyncio, который я теперь не использую везде и запускаю приложение wsgi сейчас.
Я думал, что это может быть проблема с сеансом, но думаю, что это не так. т.

Подробнее здесь: https://stackoverflow.com/questions/792 ... zing-sqlal
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»