Я использую следующую модель для хранения данных.Flask-SQLAlchemy: манипулировать атрибутом данных после извлечения
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
timestamp=db.Column(DateTime(timezone=True), nullable=False)
def __init__(self, username, timestamp=None):
self.username = username
if timestamp is None:
timestamp =datetime.datetime.now()
self.timestamp = timestamp
def __repr__(self):
return '<User %r>' % self.username
Теперь мой вопрос: при извлечении данных с использованием
user = User.query.filter_by(username='admin').first()
Я понимаю, что данные будут извлекаться и преобразуется в User
объект?
В общем, я хочу, чтобы при получении данных, используя запрос, как указано выше, данные обрабатываются автоматически.
То есть, здесь, в моем случае, отметка времени известна. Для этого я буду использовать pytz.localize().
Я пробовал:
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
timestamp=db.Column(DateTime(timezone=True), nullable=False)
def __init__(self, username, timestamp=None):
self.username = username
if timestamp is None:
timestamp =datetime.datetime.now()
timestamp = pytz.utc.localize(timestamp)
self.timestamp = timestamp
def __repr__(self):
return '<User %r>' % self.username
Я думал об этом, как, когда объект инициализируется,
if(timestamp is none)
new entry
initialize timestamp
make timezone aware #even if fetched from db
self.timestamp=timestamp`
Но, это не работает. __init__
не вызывается при запросе данных. Что может быть сделано?
Wow. Это ТОЧНАЯ вещь, которую я искал. Но я не уверен, почему это не работает. Я добавил '''@orm.reconstructor Защиту init_on_load (само): печать "REonstructor Called" self.timestamp = pytz.utc.localize (self.timestamp) '' 'Но ни одно сообщение не печатается. –
Просто протестировал его в одном из моих проектов (Python 3.4), а также добавил оператор печати и распечатает сообщение. –
@Stjin Он не работает в машине. Пробовал на виртуальной машине Ubuntu, она сработала. Будет больше смотреть на него. Большое спасибо. Я застрял у него с двух дней. Пробовал много вещей, но слово «реконструктор» даже не приблизилось к моему разуму. –