[PYTHON] Legen Sie die Standardwerte vor dem Festschreiben in sqlalchemy.orm fest



Ein kleiner spezieller Anwendungsfall

Erstellen Sie ein ORM im Klassendeklarationsformat aus declative_base in sqlalchemy.orm.

Ich möchte eine Benutzerklasse wie folgt erstellen und den Anfangswert von num auf 0 setzen.

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)

Da None und 1 nicht hinzugefügt werden können, tritt ein Fehler auf, wenn dieser unverändert bleibt. Wenn Sie dort suchen, finden Sie den Schlüsselwortparameter default, server_default.

default ist der Wert, der beim Festschreiben in die Tabelle verwendet wird. server_default ist der Anfangswert in CREATE TABLE.

Wann möchten Sie es vor dem Festschreiben verwenden ...? Es dauerte länger als nötig, um es zu finden. Die Schlussfolgerung ist einfach und Sie sollten "init" normalerweise verwenden.

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)

Die Referenz besagt auch, dass Sie __init__ verwenden können. http://docs.sqlalchemy.org/en/latest/orm/constructors.html#mapping-constructors

Recommended Posts

Legen Sie die Standardwerte vor dem Festschreiben in sqlalchemy.orm fest
Ruft Umgebungsvariablen in Python ab, andernfalls legen Sie Standardwerte fest
So setzen Sie die Standardcodierung in Python auf utf-8
Setze spinning_friction in pybullet
Stellen Sie ulimit im Supervisor ein
Werte in Python austauschen