UUID, Email & DateTime
UUID, Email, DateTime y Otros Escalares
Sección titulada «UUID, Email, DateTime y Otros Escalares»PyGo proporciona tipos escalares validados integrados para casos de uso comunes:
- UUID: Identificador Único Universal (v4 por defecto)
- Email: Dirección de correo electrónico conforme a RFC 5322
- DateTime: Fecha y hora ISO 8601 con conciencia de zona horaria
- URL: URL validada
- Phone: Número de teléfono validado
- Decimal: Tipo decimal para cálculos precisos
Todos los tipos escalares se validan en tiempo de compilación y generan código Go y Python idiomático.
Definición
Sección titulada «Definición»model User: id: UUID # UUID v4 auto-generado name: StringCódigo Generado
Sección titulada «Código Generado»Go:
type User struct { ID string `json:"id"` Name string `json:"name"`}Python:
import uuid
class User(BaseModel): id: uuid.UUID name: strRepresentación en Base de Datos
Sección titulada «Representación en Base de Datos»CREATE TABLE user ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), name TEXT NOT NULL);Definición
Sección titulada «Definición»model Contact: email: Email name: StringValidación
Sección titulada «Validación»Los correos se validan en tiempo de compilación:
# Válidocontact = Contact(email="user@example.com", name="Alice")
# Inválido — error de compilación# contact = Contact(email="not-an-email", name="Bob")Formato: local-part@dominio (conforme a RFC 5322)
Código Generado
Sección titulada «Código Generado»Go:
type Contact struct { Email string `json:"email"` Name string `json:"name"`}Python:
class Contact(BaseModel): email: str # validado al asignar name: strDateTime
Sección titulada «DateTime»Definición
Sección titulada «Definición»model Event: title: String started_at: DateTime ended_at: DateTime?Marcas de Tiempo Automáticas
Sección titulada «Marcas de Tiempo Automáticas»model Article: title: String created: DateTime = now() # Establecido al crear updated: DateTime? # Optional, actualizado manualmenteManejo de Zonas Horarias
Sección titulada «Manejo de Zonas Horarias»Todos los campos DateTime almacenan fechas con zona horaria en UTC por defecto:
event = Event( title="Launch", started_at="2024-01-15T09:00:00+05:00" # Con zona horaria)
# Almacenado internamente como UTC# event.started_at → 2024-01-15 04:00:00 UTCCódigo Generado
Sección titulada «Código Generado»Go:
import "time"
type Event struct { Title string StartedAt time.Time EndedAt *time.Time}Python:
from datetime import datetime
class Event(BaseModel): title: str started_at: datetime ended_at: Optional[datetime] = NoneRepresentación en Base de Datos
Sección titulada «Representación en Base de Datos»CREATE TABLE event ( id INTEGER PRIMARY KEY, title TEXT NOT NULL, started_at TIMESTAMP WITH TIME ZONE, ended_at TIMESTAMP WITH TIME ZONE);Definición
Sección titulada «Definición»model Website: url: URL name: StringURL validada (ej. https://example.com/path).
Definición
Sección titulada «Definición»model Contact: phone: Phone name: StringNúmero de teléfono validado (ej. +1-555-123-4567).
Decimal
Sección titulada «Decimal»Definición
Sección titulada «Definición»model Product: name: String price: DecimalTipo decimal para cálculos financieros precisos.
Código Generado
Sección titulada «Código Generado»Go:
type Product struct { Name string Price string // Decimal almacenado como string para precisión}Python:
from decimal import Decimal
class Product(BaseModel): name: str price: DecimalCombinado con Otros Tipos
Sección titulada «Combinado con Otros Tipos»Escalares Opcionales
Sección titulada «Escalares Opcionales»model Profile: user_id: UUID secondary_email: Email? = None last_login: DateTime? = NoneArreglo de Escalares
Sección titulada «Arreglo de Escalares»model Group: name: String member_ids: Array[UUID]Resumen de Formatos
Sección titulada «Resumen de Formatos»| Tipo | Tipo Python | Tipo Go | Tipo DB |
|---|---|---|---|
UUID |
uuid.UUID |
string |
UUID |
Email |
str (validado) |
string |
TEXT |
DateTime |
datetime |
time.Time |
TIMESTAMP |
URL |
str |
string |
TEXT |
Phone |
str |
string |
TEXT |
Decimal |
Decimal |
string |
TEXT |
Mejores Prácticas
Sección titulada «Mejores Prácticas»- Siempre usa
UUIDcomo claves primarias — nunca enteros autoincrementales - Valida correos en el nivel del modelo, no en la capa del controlador
- Almacena todas las fechas en UTC — convierte a hora local solo para mostrar
- Usa
Decimalpara valores monetarios o numéricos precisos - Usa
Email?para campos de correo opcionales