So, I tried to manually add user from dashboard manually inputting UUID, and it throws sqlalchemy exception.
from sqlalchemy import Column, Boolean, Integer, String, create_engine
from sqlalchemy.orm import (
declarative_base,
relationship,
sessionmaker,
Mapped,
mapped_column,
)
from uuid import UUID as PyUUID
from sqlalchemy.dialects.postgresql import UUID
Base = declarative_base()
engine = create_engine(
"sqlite:///example.db",
connect_args={"check_same_thread": False},
)
SessionLocal = sessionmaker(bind=engine)
class User(Base):
__tablename__ = "users"
uuid: Mapped[PyUUID] = mapped_column(UUID, primary_key=True)
name: Mapped[str]
def __str__(self) -> str:
return f"User {self.uuid}"
Base.metadata.create_all(engine) # Create tables
from fastapi import Request
from sqladmin import ModelView
class UserAdmin(ModelView, model=User):
column_list = User.__table__.columns.keys()
form_include_pk = True
from fastapi import FastAPI
from sqladmin import Admin
app = FastAPI()
admin = Admin(app=app, session_maker=SessionLocal)
admin.add_view(UserAdmin)
Add User from admin panel and it fails.
(builtins.AttributeError) 'str' object has no attribute 'hex'
[SQL: INSERT INTO users (uuid, name) VALUES (?, ?)]
[parameters: [{'uuid': '00000000-0000-0000-0000-000000000001', 'name': 'John'}]]
Traceback (most recent call last):
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1815, in _execute_context
context = constructor(
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 1494, in _init_compiled
l_param: List[Any] = [
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 1496, in <listcomp>
flattened_processors[key](compiled_params[key])
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/sql/sqltypes.py", line 3734, in process
value = value.hex
AttributeError: 'str' object has no attribute 'hex'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqladmin/application.py", line 554, in create
obj = await model_view.insert_model(request, form_data_dict)
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqladmin/models.py", line 1088, in insert_model
return await Query(self).insert(data, request)
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqladmin/_queries.py", line 234, in insert
return await coro
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/anyio/to_thread.py", line 63, in run_sync
return await get_async_backend().run_sync_in_worker_thread(
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/anyio/_backends/_asyncio.py", line 2502, in run_sync_in_worker_thread
return await future
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/anyio/_backends/_asyncio.py", line 986, in run
result = context.run(func, *args)
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqladmin/_queries.py", line 203, in _insert_sync
session.commit()
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 2030, in commit
trans.commit(_to_root=True)
File "<string>", line 2, in commit
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 1311, in commit
self._prepare_impl()
File "<string>", line 2, in _prepare_impl
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 1286, in _prepare_impl
self.session.flush()
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 4331, in flush
self._flush(objects)
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 4466, in _flush
with util.safe_reraise():
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 4427, in _flush
flush_context.execute()
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/orm/unitofwork.py", line 466, in execute
rec.execute(self)
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/orm/unitofwork.py", line 642, in execute
util.preloaded.orm_persistence.save_obj(
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/orm/persistence.py", line 93, in save_obj
_emit_insert_statements(
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/orm/persistence.py", line 1048, in _emit_insert_statements
result = connection.execute(
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1419, in execute
return meth(
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/sql/elements.py", line 527, in _execute_on_connection
return connection._execute_clauseelement(
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1641, in _execute_clauseelement
ret = self._execute_context(
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1821, in _execute_context
self._handle_dbapi_exception(
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 2363, in _handle_dbapi_exception
raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/engine/base.py", line 1815, in _execute_context
context = constructor(
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 1494, in _init_compiled
l_param: List[Any] = [
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 1496, in <listcomp>
flattened_processors[key](compiled_params[key])
File "/home/mzeynall/Projects/sqladmin-test/.venv/lib/python3.10/site-packages/sqlalchemy/sql/sqltypes.py", line 3734, in process
value = value.hex
sqlalchemy.exc.StatementError: (builtins.AttributeError) 'str' object has no attribute 'hex'
[SQL: INSERT INTO users (uuid, name) VALUES (?, ?)]
[parameters: [{'uuid': '00000000-0000-0000-0000-000000000001', 'name': 'John'}]]
Checklist
master.Describe the bug
So, I tried to manually add user from dashboard manually inputting UUID, and it throws sqlalchemy exception.
Steps to reproduce the bug
Add User from admin panel and it fails.
Expected behavior
Successful creation
Actual behavior
Exception:
Debugging material
Environment
OS: Linux
Python: 3.10
SQLAdmin: 0.22.0
Additional context
No response