Я использую postgres с SQLAlchemy.Я хочу создать объекты профиля и заставить их автоматически генерировать GUID.Однако в настоящее время в идентификаторах моего профиля не хранятся никакие значения, например:
profile = Profile(name='some_profile')
-> print(profile.name)
some_profile
-> print(profile.id)
None
Я рассмотрел, как другие реализуют GUID в своих моделях ( Как я могу использовать UUID в SQLAlchemy? ) Я понимаю, что многие люди не рекомендуют использовать GUID в качестве идентификаторов, но мне хотелось бы знать, где я ошибаюсь, несмотря на это.
Вот моя текущая реализация:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, String
from sqlalchemy.types import TypeDecorator, CHAR
import uuid
Base = declarative_base()
class GUID(TypeDecorator):
"""Platform-independent GUID type.
Uses Postgresql's UUID type, otherwise uses
CHAR(32), storing as stringified hex values.
"""
impl = CHAR
def process_bind_param(self, value, dialect):
if value is None:
return value
elif dialect.name == 'postgresql':
return str(value)
else:
if not isinstance(value, uuid.UUID):
return "%.32x" % uuid.UUID(value).int
else:
# hexstring
return "%.32x" % value.int
def process_result_value(self, value, dialect):
if value is None:
return value
else:
if not isinstance(value, uuid.UUID):
value = uuid.UUID(value)
return value
class Profile(Base):
__tablename__ = 'profile'
id = Column(GUID(), primary_key=True, default=uuid.uuid4)
name = Column(String)
Я все еще новичок в Python, но, насколько я понимаю, я объявляю тип своего столбца идентификатора профиля как GUID (настройка с помощью класса GUID).Поэтому значение GUID по умолчанию должно быть успешно сохранено при генерации в этом столбце с помощью uuid.uuid4 ().
Я предполагаю, что с классом GUID нет ничего плохого, но вместо этого в том, как я пытаюсьдля генерации значения по умолчанию в столбце id.
Любая помощь приветствуется!