Я занимаюсь разработкой БД, в которой вы сначала регистрируетесь как обычный User
, а затем становитесь Driver
. Я хотел бы создать объект Driver
в SQL-Алхимии на основе существующего объекта User
. Как мне этого добиться?
Предположим, что в таблице User
уже есть пользователь с ID = 3. Теперь мы хотели бы добавить Driver
на основе этого пользователя.
Вот классы, которые я использовал:
# Base class
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
first_name = db.Column(db.String(MAX_NAME_LENGTH), nullable=False)
last_name = db.Column(db.String(MAX_SURNAME_LENGTH), nullable=False)
email = db.Column(db.String(MAX_EMAIL_LENGTH), nullable=False, unique=True)
# Child class
class Driver(User):
id = db.Column(db.Integer, db.ForeignKey(User.__tablename__ + '.id'), primary_key=True)
photo_url= db.Column(db.String(MAX_URL_LENGTH), nullable=False)
# ...
# we can easily add a new User
user = User(first_name='Martin', last_name='Smith', email='m.smith@gmail.com')
db.session.add(user)
db.session.commit()
# But this code will create a new user and assign it to that driver instance!
# driver = Driver(# Will require fields of both User and Driver class #)
Я ожидаю найти какой-нибудь метод для взятия родительского объектаи расширяя его свойствами ребенка. Что-то вроде:
user_from_db = db.session.query(User).filter_by(User.id == 3).first()
driver = Driver(photo_url='/your_url/', based_on=user_from_db)
# And now driver has all properties of 'user_from_db'
# Furthermore, SQL-Alchemy would create a row only in `Driver` table
Как мне добиться этого с помощью наследования SQL-Alchemy?