簡體   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