Значение столбца SQLAlchemy на основе другого - PullRequest
0 голосов
/ 21 мая 2018

Интересно, можно ли вычислить значение столбца на основе других значений в той же таблице в SQLAlchemy.

Вот мой пример:

from uuid import uuid4
from datetime import datetime

from sqlalchemy import Column, String, DateTime, UniqueConstraint
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()


def generate_uuid():
    return str(uuid4())


class User(Base):
    __tablename__ = 'users'
    __table__args__ = (UniqueConstraint('username', 'email_address', 'phone'),)

    user_id = Column(String(36), primary_key=True, unique=True, default=generate_uuid)
    username = Column(String(15), nullable=False)
    password = Column(String(25), nullable=False)

    email_address = Column(String(255), nullable=False)
    phone = Column(String(20), nullable=False)

    hash = Column(String(128), nullable=False, unique=True)

    created_on = Column(DateTime(), default=datetime.utcnow)
    updated_on = Column(DateTime(), default=datetime.utcnow, onupdate=datetime.utcnow)

Чего я хочу добиться, так этоПересчитывать столбец hash всякий раз, когда username, email_address или phone изменяются (обновляются).

Возможно ли это с помощью sqlalchemy.event.listen_for?Если да, можно ли его использовать, когда hash зависит от нескольких столбцов?

1 Ответ

0 голосов
/ 21 мая 2018

Вы можете использовать mapper-события в sqlalchemy http://docs.sqlalchemy.org/en/latest/orm/events.html#mapper-events

before_update end before_insert и затем вы можете отредактировать свой экземпляр before:)

ex.:

def before_insert_function(mapper, connection, target):
    # 'target' is your object
    print(target.user_id )
    print(target.password)
    target.hash = "Other"
event.listen(User, 'before_insert', before_insert_function)

или

@event.listens_for(User, 'before_update')
def before_insert_function(mapper, connection, target):
        # 'target' is your object
        print(target.user_id )
        print(target.password)
        target.hash = "Other"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...