【发布时间】:2019-10-14 23:09:51
【问题描述】:
我正在开发一个数据库,您首先注册为普通的User,然后成为Driver。我想基于现有的User 对象在 SQL-Alchemy 中创建一个Driver 对象。我怎样才能做到这一点?
假设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 继承来实现这一点?
【问题讨论】:
标签: sqlalchemy flask-sqlalchemy