答案 0 :(得分:5)
Mapper
是ORM中的M.这是将您的表(在本例中为advertisers
)映射到类的实例(在这种情况下您缺少)的事情,以便您对其进行操作。
它让你感到困惑的原因是因为SQLAlchemy实际上是两个库中的一个 - 一个叫做SQLAlchemy Core,另一个叫SQLAlchemy ORM。 Core提供了处理表和构造返回行的查询的能力,而ORM构建在Core之上,以提供处理类实例及其作为抽象的关系的能力。核心大致对应于您可以在Connection
和Engine
上执行的操作,而ORM大致对应于您可以在Session
上执行的操作。
所以,所有这一切都是说,session.bulk_insert_mappings
是一个ORM功能,如果没有映射类,就不能使用它。
你能做什么呢?使用等效的Core功能:
query = advertisers.insert().values(missing_advetisers.to_dict('records'))
engine.execute(query) # or session.execute(query)
甚至可以使用pandas提供的to_sql
功能:
missing_advetisers.to_sql("advertiser", engine, if_exists="append")
如果您坚持使用ORM,则需要为表声明一个映射类。使用反射时最简单的方法是使用automap
。链接的文档有很多例子,所以我不打算在这里详细介绍。