Un petit cas d'utilisation spécial
Créez un ORM au format de déclaration de classe à partir de declarative_base dans sqlalchemy.orm.
Je veux créer la classe ʻUser` comme suit et définir la valeur initiale de num sur 0.
from sqlalchemy import create_engine
from sqlalchemy import Column, Integer, text
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine("sqlite:///:memory:", echo=True)
Base = declarative_base()
class User(Base):
__tablename__="users"
id = Column(Integer, primary_key=True)
num = Column(Integer)
Base.metadata.create_all(engine)
u = User()
print(u.id, u.num+1)
Puisque Aucun et 1 ne peuvent être ajoutés, une erreur se produira si cela est laissé tel quel. Si vous regardez là, vous trouverez le paramètre de mot-clé default
, server_default
.
default
est la valeur utilisée lors de la validation dans la table, server_default
est la valeur initiale dans CREATE TABLE
.
Quand vous voulez l'utiliser avant de vous engager ...? Il a fallu plus de temps que nécessaire pour le trouver. La conclusion est simple et vous devriez utiliser «init» normalement.
from sqlalchemy import create_engine
from sqlalchemy import Column, Integer, text
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine("sqlite:///:memory:", echo=True)
Base = declarative_base()
class User(Base):
def __init__(self, *args, **kwargs):
super(Base, self).__init__(*args, **kwargs)
self.num = 0
__tablename__="users"
id = Column(Integer, primary_key=True)
num = Column(Integer, server_default=text("0"))
Base.metadata.create_all(engine)
u = User()
print(u.id, u.num+1)
La référence indique également que vous pouvez utiliser «init». http://docs.sqlalchemy.org/en/latest/orm/constructors.html#mapping-constructors
Recommended Posts