首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoEngine Python AttributeError

MongoEngine Python AttributeError
EN

Stack Overflow用户
提问于 2019-08-14 17:23:46
回答 1查看 537关注 0票数 0

我试图在我的应用程序中使用mongodb,我创建了一个Player Class实例,如:

代码语言:javascript
复制
class Player(mongoengine.Document):

def __init__(self,name=None,hschool=None,gradclass=None,position=None,
             height=None,weight=None,main_pos=None,side_pos=None,arm=None,
            extVelo=None,infieldVelo=None,outfieldVelo=None,popTime=None,
            catcherVelo=None,sixtyYard=None,fastBallVelo=None,maxfBallVelo=None,
            curveball=None,changeup=None,slider=None,splitter=None,cutter=None,
            knuckle=None,fork=None,profile_url=None):
     self._name = mongoengine.StringField()
    self.p_name = name
    self._hschool = mongoengine.StringField()
    self._gradclass = mongoengine.StringField()
    self._position = mongoengine.StringField()
    self._main_pos = mongoengine.StringField()
    self._side_pos = mongoengine.StringField()
    self._arm = mongoengine.StringField()
    self._height = mongoengine.StringField()
    self._weight = mongoengine.StringField()
    self._extVelo= mongoengine.StringField()
    self.heightFlag = False
    self._infieldVelo = mongoengine.StringField()
    self._outfieldVelo = mongoengine.StringField()
    self._popTime = mongoengine.StringField()
    self._catcherVelo = mongoengine.StringField()
    self._sixtyYard=mongoengine.StringField()
    self._fastBallVelo = mongoengine.StringField()
    self._maxfBallVelo = mongoengine.StringField()
    self._curveball = mongoengine.StringField()
    self._changeup = mongoengine.StringField()
    self._slider = mongoengine.StringField()
    self._splitter = mongoengine.StringField()
    self._cutter = mongoengine.StringField()
    self._knuckle = mongoengine.StringField()
    self._fork = mongoengine.StringField()
    self._profile_url = mongoengine.StringField()
    self.p_profile_url = profile_url

在此之后,我为Player属性设置了setter和getter,我将所有这些属性设置为字符串。做完所有这些工作之后,我想把这个播放器实例保存到数据库中,这样我以后就可以到达它们了。在我的主要python文件中,我有以下代码块:

代码语言:javascript
复制
def LoadData_click(url):
    p_arr=[]
    # javascript func for clearing the list here
    try:
        table1_string,table2_string,soup,page_title = get_data(url)
    except Exception as e:
        print(e)     
        return
    p_arr = get_roster(soup)
    print('button worked')
    for i,p in enumerate(p_arr):
        print(i+1/len(p_arr)*100)
        eel.progressBarUpdate(int((i+1)/len(p_arr)*100))
        set_position(p,table2_string)
        set_pitching(p,table1_string)
        set_link_props(p)
        p.save()
        # add Item to list
    return p_arr


if __name__ == "__main__":
    mongoengine.register_connection(alias='core',name='database')

当我运行主应用程序时,它会给出以下错误:

文件"c:\Users\tolga\Desktop\PlayerEditorJS\main.py",第33行,LoadData_click p.save() File "C:\Python\lib\site-packages\mongoengine\document.py",第369行,保存self.validate(clean=clean)文件"C:\Python\lib\site-packages\mongoengine\base\document.py",第384行,文件"C:\Python\lib\site-packages\mongoengine\base\document.py",第384行,以self._data.get(名称)表示名称(在self._fields_ordered中)] AttributeError:_dynamic_fields

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-14 18:06:23

这不是使用MongoEngine的方式,您的类必须从Document基类继承,如果您不使用类,并且实例将丢失MongoEngine所需的大多数内部部件来正常工作。

编辑:您还必须将字段定义为类属性,而不是在构造函数中。这是因为场景后面的元类( Document)是如何工作的,当类被解释时,它会扫描类属性,这就是它希望在哪里找到您的字段。

确保检查来自自述文件文档的示例

例如:

代码语言:javascript
复制
from mongoengine import Document, StringField, IntField

class Player(Document):
    name = StringField()
    height = IntField()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57499358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档