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

时间:2018-04-21 04:33:06

标签: python postgresql sqlalchemy

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

module.exports = () => {
var router = express.Router();
router.get('/', (req, res) => {
  db.query(`SELECT * FROM articles_table WHERE ID='${pageId.id}'`, (err, page) => {
    if (err) {
      console.error(err);
      res.status(500).send('database error').end();
    } else {
      res.send(page);
    }
  })
})

MyEnum在哪里:

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),
    )

我可以获得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语句生成SQL?

1 个答案:

答案 0 :(得分:-1)

我找到了答案!

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

它返回所有已创建枚举的列表,其中IMO甚至比原始sql documentation is here更好。