如何使用DeclarativeMeta接口反射表?

时间:2016-02-22 18:51:18

标签: python sqlalchemy

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是以声明方式定义的类。 我认为应该有一个返回我想要的类方法。 有谁知道吗?

1 个答案:

答案 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...