繁体   English   中英

SQLAlchemy + Postgres(打印创建的类型,例如枚举类型)

[英]SQLAlchemy + Postgres (print created types, e.g. enum types)

我希望能够获得有关在SQLAlchemy的create_all()过程中将创建哪些类型的信息。 是的,如果我设置生成的SQL的回显,则可以打印它们,但是如何在不实际访问数据库的情况下打印出来? 例如,我有一个模型:

class MyModel(Base):
    id = Column(Integer, primary_key=True)
    indexed_field = Column(String(50))
    enum_field = Column(Enum(MyEnum))

    __table_args__ = (
        Index("my_ix", indexed_field),
    )

MyEnum在哪里:

class MyEnum(enum.Enum):
    A = 0
    B = 1

我可以这样获得CREATE TABLE语句和所有CREATE INDEX语句:

from sqlalchemy.schema import CreateTable, CreateIndex

print(str(CreateTable(MyModel.__table__).compile(postgres_engine)))
for idx in MyModel.__table__.indexes:
    print(str(CreateIndex(idx)).compile(postgres_engine))

结果将是这样的:

CREATE TABLE my_model (
    id SERIAL NOT NULL, 
    indexed_field VARCHAR(50), 
    enum_field myenum, 
    PRIMARY KEY (id)
)
CREATE INDEX my_ix ON my_model (indexed_field)

注意行enum_field myenum 如何获取CREATE TYPE myenum...语句的生成SQL?

我找到了答案!

from sqlalchemy.dialects.postgresql.base import PGInspector
PGInspector(postgres_engine).get_enums()

它返回所有创建的枚举的列表,IMO比原始sql更好, 文档在此处

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM