J'essaie de déterminer comment ajouter une fonction contextuelle (par exemple, def get_user_full_name()) qui sera déclenchée à partir des spécifications par défaut et onupdate sur une colonne . J'essaye de placer un champ composé qui combine le prénom et le nom en une seule valeur de nom complet pour éviter d'avoir constamment à concaténer les deux champs dans toutes les requêtes. J'utilise l'approche déclarative. Ceci est un exemple d'un modèle similaire:Fonction sensible au contexte SQLAlchemy pour créer une valeur composite sur l'insertion et la mise à jour
class SomeMembers(Base):
__tablename__ = 'some_members'
__table_args__ = {'mysql_engine':'InnoDB'}
SomeGroup = Column(Unicode(50), primary_key=True)
UserID = Column(Unicode(50), primary_key=True)
FullName = Column(Unicode(255), default=get_user_full_name, onupdate=get_user_full_name, index=True)
FirstName = Column(Unicode(255), index=True)
LastName = Column(Unicode(255), index=True)
UserName = Column(Unicode(255))
Ceci est la fonction que j'ai écrit qui fait état dans la trace de la pile que ni les clés prenom LastName sont valables:
def get_user_full_name(context):
return " ".join((context.compiled_parameters[0]['FirstName'],context.compiled_parameters[0]['LastName']))
Il ne clair pour moi comment je peux référencer les deux colonnes (FirstName et LastName) des données existantes pour créer une valeur composite à stocker pour une récupération facile. Par exemple, si j'avais un utilisateur nommé John Doe, la méthode get_user_full_name devrait prendre "John" et "Doe" et retourner la valeur complète de "John Doe".
Dans le documentation, il fait référence à context.current_parameters mais cela n'existe pas dans mon cas. Je suppose que c'est parce que nous utilisons l'approche déclarative. Si elle a fait travailler ma fonction get_user_full_name ressemblerait à ceci:
def get_user_full_name(context):
return " ".join((context.current_parameters['FirstName'],context.current_parameters['LastName']))
Je sais que cela est probablement trivial mais je ne peux pas sembler casser le code de l'endroit où ces informations sont stockées et comment accéder dynamiquement.
Un petit aperçu serait très apprécié. Je suis également ouvert à une approche plus élégante aussi.
Merci à l'avance ...
Cheers,
Paul