gpt4 book ai didi

python - sqlalchemy 似乎不喜欢 __getattr__()

转载 作者:行者123 更新时间:2023-11-30 23:07:13 25 4
gpt4 key购买 nike

在我的基于 Flask sqlalchemy 的应用程序中,我有一个这样的模型:

class Foo(object):
start_date = db.Column(db.DateTime())

它工作正常,但是当我使用模板引擎通过执行 {{ foo.start_date }} 将日期打印到 HTML 页面上时,它会打印一条丑陋的行,如 2015 -8-8 00:00:00 。试图想出我自己的格式,我想到了一些聪明的东西(至少在我遇到问题之前)

class Foo(object):
start_date = db.Column(db.DateTime())
def __getattr__(self, name):
return "{0}-{1}-{2}".format(self.start_date.year....)

但是,SQLAlchemy 内部的某些东西不喜欢这样。当创建一个新对象时,它会引发以下异常:

  File "<string>", line 6, in __init__
File "/home/wenliang/work/template/flask/local/lib/python2.7/site-packages/sqlalchemy/ext/declarative/base.py", line 526, in _declarative_constructor
setattr(self, k, kwargs[k])
File "/home/wenliang/work/template/flask/local/lib/python2.7/site-packages/sqlalchemy/orm/attributes.py", line 226, in __set__
instance_dict(instance), value, None)
File "/home/wenliang/work/template/flask/local/lib/python2.7/site-packages/sqlalchemy/orm/attributes.py", line 694, in set
state._modified_event(dict_, self, old)
AttributeError: 'NoneType' object has no attribute '_modified_event'

有人见过这个吗?

最佳答案

SQLAlchemy 在内部使用__getattr__。如果你重载,整个炼金术魔法将不再起作用。

您正在访问的字段是一个DateTime对象。如果您想以任何其他方式将其格式化为字符串作为默认呈现,则应使用 strftime()

https://stackoverflow.com/a/4830620/3929826举个例子。 https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior有格式字符串的文档。

关于python - sqlalchemy 似乎不喜欢 __getattr__(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32334733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com