[PYTHON] Définissez les valeurs par défaut avant de valider dans sqlalchemy.orm



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

Définissez les valeurs par défaut avant de valider dans sqlalchemy.orm
Obtenez des variables d'environnement en Python, sinon définissez les valeurs par défaut
Pour définir le codage par défaut sur utf-8 en python
Définir spinning_friction dans pybullet
Définir ulimit dans le superviseur
Échange de valeurs en Python