в SQLalchemy Мне нужно создать сеттер, который работает следующим образом:
class User():
def __init__(self, id, email):
self. id = id
self.email = email
@property
def account(self):
return self.email.replace('@','_at_')
@account.setter
def account(self):
self.email = self.email.replace('@','_at_')
u1 = User(1, 'emailadress@nowhere.com')
print(u1.id, u1.email, u1.account)
u1.email = 'email@nirvana.org'
print(u1.id, u1.email, u1.account)
Результат именно то, что я хочу:
1 emailadress@nowhere.com emailadress@nowhere.com 1 email@nirvana.org email@nirvana.org
Я пытался приспособить это к SQLalchemy, но account
не фиксируется в базе данных:
Base = declarative_base()
class User(Base):
__tablename__ = "Users"
id = Column('id', Integer, primary_key=True)
email = Column('email', String)
_account = Column('account', String)
def __init__(self, id, email):
self.id = id
self.email = email
@hybrid_property
def account(self):
return self._account
@account.setter
def account(self):
self._account = self.email.replace('@','_at_')
engine = create_engine('sqlite:///test.db', echo=False)
Base.metadata.create_all(bind=engine)
session = Session(engine)
u1 = User(1, 'some@mail.org')
print(u1.id, u1.email, u1.account)
session.add(u1)
session.commit()
session.close()
Что я здесь не так делаю? В терминале результат в порядке:
1 some@mail.org some_at_mail.org
Но в базу данных u1.account
передается с None
:
INFO sqlalchemy.engine.base.Engine INSERT INTO "Users" (id, email, account) VALUES (?, ?, ?)
INFO sqlalchemy.engine.base.Engine (1, 'some@mail.org', None)
Заранее большое спасибо!
biaszek