PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

SQLAlchemy con dataclass predefinita che non popola il database postgres

Da '' e 0 sono rispettivamente i valori restituiti di default di str() e int() funzioni, è possibile utilizzare il seguente codice per inserire quelle impostazioni predefinite:

@dataclass
class Person:
    id: int = None
    name: str = field(default_factory=str)
    age: int = field(default_factory=int)
    hobbies: List[str] = field(default_factory=list)
    birthday: datetime = field(default_factory=datetime)

Sfortunatamente, per qualche motivo, utilizzando default parametro di field() la funzione non funziona come ci si potrebbe aspettare (potrebbe essere un bug delle dataclasses backport o un malinteso...). Ma puoi comunque usare il default_factory per specificare valori diversi da '' e 0 utilizzando lambda :

@dataclass
class Person:
    id: int = None
    name: str = field(default_factory=lambda: 'john doe')
    age: int = field(default_factory=lambda: 77)
    hobbies: List[str] = field(default_factory=list)
    birthday: datetime = field(default_factory=datetime)