SQLAlchemy不映射反射类

2024-09-30 14:16:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这个代码:

def advertiser_table(engine):
    return Table('advertiser', metadata, autoload=True, autoload_with=engine)

后来我试试这个:

^{pr2}$

其中missing_adverisers是熊猫DataFrame(但这对这个问题并不重要)。在

这给我的错误是:

sqlalchemy.orm.exc.UnmappedClassError: Class ''advertiser'' is not mapped

通过阅读文档,我可以拼凑出足够的篇幅来问这个问题,但不会比这更多。。。什么是Mapper,为什么它对这个库的功能如此有害?。。为什么“类”没有映射?显然,我该怎么做才能把它“映射”到这个库想要它映射的任何地方?在


Tags: 代码truedataframereturndefwithtableengine
1条回答
网友
1楼 · 发布于 2024-09-30 14:16:26

Mapper是ORM中的M。它将您的表(在本例中为advertisers)映射到一个类的实例(在本例中缺少这些实例),以便对其进行操作。在

让您感到困惑的原因是SQLAlchemy实际上是两个库,一个叫做SQLAlchemy Core,另一个是sqlalchemyorm。Core提供了处理表和构造返回的查询的能力,而ORM构建在Core之上,提供了将类的实例及其关系作为抽象处理的能力。Core大致对应于您可以在ConnectionEngine上执行的操作,而ORM大致对应于您可以在Session上执行的操作。在

所以,所有这些都是说,session.bulk_insert_mappings是一个ORM功能,如果没有映射类,就不能使用它。在

你能做什么呢?使用等效的核心功能:

query = advertisers.insert().values(missing_advetisers.to_dict('records'))
engine.execute(query)  # or session.execute(query)

甚至可以使用pandas提供的^{}函数:

^{pr2}$

如果坚持使用ORM,则需要为表声明一个映射类。使用反射时最简单的方法是使用^{}。链接的文档有许多示例,因此我将在这里详细介绍。在

相关问题 更多 >

    热门问题