Взять пример из документа
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), nullable=False)
addresses = db.relationship('Address', lazy='dynamic',
backref=db.backref('person', lazy='select'))
Мы можем установить для параметра lazy значение , когда мы создаем модели . Но я не нашел никакого документа, показывающего, как изменить его после того, как он был создан.
В большинстве моих ситуаций, таких как
user = User.query.first()
addresses = user.addresses.filter(is_del=0).all()
один-ко-многим или
wallet = user.wallet
, то есть модель «один к одному», я просто устанавливаю lazy на dynamic или выбираю , чтобы позволить модели получать только те данные, которые мне нужны.
Однако в последнее время я хочу экспортировать данные в базу данных, используя интерфейсную страницу администратора.
user_list = UserModel.query.all()
for x in user_list:
item = {
"ID": x.id if x.id else ''
}
if 'basic' in fields or is_all_field == 1:
ex_item = {
"Email": x.base.account,
"Full Name": x.base.full_name,
"Display Name": x.display_name if x.display_name else '',
"Phone Number": x.base.phone_number if x.base.phone_number else '',
"Status": status_map(x.is_sharer,x.is_block,x.status_id)
"Register Time": x.create_date.strftime('%Y-%m-%d %H:%M:%S') if x.create_date else ''
}
item = {**item, **ex_item}
if ......
........
Если я продолжу использовать select и dynamic, как lazy . Это будет очень очень медленно, потому что каждый цикл родительского запроса будет обращаться к базе данных каждый раз, когда он использует подзапрос.
Я проверяю скорость между , выбираю и , соединяем , используя одно поле, например "Full Name": x.base.full_name
, для экспорта всех пользовательских данных. Выберите получил 53 с и присоединился получил 0,02 с.
Есть ли способ изменить параметр lazy , не изменяя исходную модель?