我一直在尝试使用 sqlalchemy 的 bulk_insert_mappings。我知道我可以创建一个会话并连接到数据库。我已经初始化了我的引擎,但我似乎无法从表中获取我需要的映射器。
from sqlalchemy import create_engine
from sqlalchemy.orm.session import sessionmaker,Session
from sqlalchemy_utils import get_mapper
engine = create_engine('mysql+pymysql://{}:{}@IP:PORT/'.format(USER,PW)) # removed my config here
connection = engine.connect()
m = MetaData(bind=engine,schema='test')
m.reflect()
Session = sessionmaker(bind=engine)
s = Session()
s.bulk_insert_mappings(get_mapper(m.tables['test.test']), pd.DataFrame({'a':['a','b','c']}).to_dict(orient="records"))
s.commit()
s.close()
我最近发现了一堆关于 SO 的相关问题
SQLAlchemy 从 Table 对象(从 Metadata 或 Session 或其他)获取 Mapper 对象
但 sqlalchemy_utils.get_mapper 提出:
“ValueError:无法获取表'test'的映射器。”
sqlalchemy.orm.mapperlib._mapper_registry
似乎是空的。也许是因为我没有将它绑定到我的引擎。但不知道该怎么做。
PS:test是一个非常简单的TEXT类型的一栏表
这是 m.tables['test.test'] 的输出
Table('test', MetaData(bind=Engine(mysql+pymysql://USER:***@IP:PORT/)), Column('a', TEXT(), table=<test>), schema='test')