http://docs.sqlalchemy.org/en/latest/core/reflection.html
写在该页面中,可以通过反射获得'Table'对象。
messages = Table('messages', meta, autoload=True, autoload_with=engine)
但是,我不知道如何以声明的方式使用它。
我想写一些像
这样的代码s.query(messages).all()
s.add(messages(sender='a', receiver='b', body='hello'))
s.commit()
,好像message是以声明方式定义的类。 我认为应该有一个返回我想要的类方法。 有谁知道吗?
答案 0 :(得分:2)
您可以通过SQLAlchemy以几种方式使用声明模型的反射。您可以使用Table
属性将__table__
实例传递给声明性模型(而不是__tablename__
,如果您还没有Table
实例,则更常见。 )或者,你可以使用DeferredReflection
mixin为你处理这个问题,我觉得这样会更方便。
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.ext.declarative import DeferredReflection
from sqlalchemy import create_engine
Base = declarative_base()
class Messages(DeferredReflection, Base):
__tablename__ = 'messages'
engine = create_engine( ... )
DeferredReflection.prepare(engine)
# make session etc...