您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何以正确的顺序导入Scrapy项目密钥?

如何以正确的顺序导入Scrapy项目密钥?

我可以使它起作用的唯一方法是以下列方式使用此解决方案。

我的items.py档案:

from scrapy.item import Item, Field
from collections import OrderedDict
from types import FunctionType

class StaticOrderHelper(type):
    # Requires python3
    def __prepare__(name, bases, **kwargs):
        return OrderedDict()

    def __new__(mcls, name, bases, namespace, **kwargs):
        namespace['_field_order'] = [
                k
                for k, v in namespace.items()
                if not k.startswith('__') and not k.endswith('__')
                    and not isinstance(v, (FunctionType, classmethod, staticmethod))
        ]
        return type.__new__(mcls, name, bases, namespace, **kwargs)

class NewAdsItem(Metaclass=StaticOrderHelper):
    AdId        = Field()
    DateR       = Field()
    AdURL       = Field()

然后使用以下命令将该_field_order项目导入你piplines.py的:

...
from adbot.items import NewAdsItem
...
class DbPipeline(object):
    ikeys = NewAdsItem._field_order
    ...
    def createDbTable(self):
        print("Creating new table: %s" % self.dbtable )
        print("Keys in creatDbTable: \t%s" % ",".join(self.ikeys) )
        ...

现在,我可以按照正确的外观顺序创建新的数据库表,而不必担心Python以一种意想不到的方式对字典进行奇怪的排序。

其他 2022/1/1 18:13:49 有713人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶