[英]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.