Таблицы базы данных создаются правильно с помощью 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
def __repr__(self):
pass
def __dict__(self):
pass
но я не понимаю, что означает это сообщение об ошибке при попытке создайте объект «Виртуальная машина» в моих модульных тестах.
Код: Выделить всё
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