我可以使它起作用的唯一方法是以下列方式使用此解决方案。
我的
items.py档案:
from scrapy.item import Item, Fieldfrom collections import OrderedDictfrom types import FunctionTypeclass 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以一种意想不到的方式对字典进行奇怪的排序。



