【发布时间】:2020-09-21 07:58:33
【问题描述】:
我在 MongoDB 数据库上连接了一个小型 Flask API,使用 MongoEngine 作为 ORM。
我的一个文件是这样的:
class PriceHistoryDocument(db.EmbeddedDocument):
create_date=db.DateTimeField(required=True, default=get_current_date())
price=db.DecimalField(required=True, precision=4)
error=db.StringField(required=True, default='')
class ProductModel(AuditModel):
meta = {'collection': 'product', 'queryset_class': CustomQuerySet}
id = db.SequenceField(primary_key=True)
price_history = db.EmbeddedDocumentListField(PriceHistoryDocument)
get_current_date():
from datetime import datetime
def get_current_date():
return datetime.utcnow()
以及来自控制器的保存产品部分:
try:
product = ProductModel.objects.get(url=url)
# current_app.logger.info(f'Product url found {url}')
product.price_history.append(current_price_detail)
product.save()
if response: # TODO: fix this to something clearer
updated_url.append(url)
else:
failed_url.append(url)
except Exception as e:
# current_app.logger.info('Unable to save the product details {e}!')
failed_url.append(url)
我的问题是,如果我启动服务器并多次调用控制器,每次产品都以相同的日期(服务器启动的日期)保存在数据库中。
如果我用 default=datetime.utcnow()
更改 create_date 字段也是如此为什么会这样?
乐: 想办法: 默认值不应该调用函数,只需要一个引用
create_date=db.DateTimeField(required=True, default=get_current_date)
【问题讨论】:
标签: python mongodb flask mongoengine