2017-03-03 90 views
1

我已經定義模型象下面這樣的SQLAlchemy生成SQLAlchemy的類模型YAML文件

class Users(db.Model, CRUD_MixIn): 
    id = db.Column(db.Integer, primary_key=True) 

    email = db.Column(db.String(250), nullable=False, unique=True) 
    password = db.Column(db.String(250), nullable=False) 
    name = db.Column(db.String(250), nullable=False) 
    active = db.Column(db.Integer, nullable=False) 
    creation_time = db.Column(db.TIMESTAMP, server_default=db.func.current_timestamp(), nullable=False) 
    role = db.Column(db.String(250), db.ForeignKey('roles.name')) 

我想從它生成一個YAML文件類似以下內容:

users: 
- email:email 
- password:string 
- name:string 
- active:boolean 
- creation_time:datetime 
- modification_time:datetime 
- role:string 

有什麼辦法在Python中做到這一點?

+0

您正在使用標量的序列,將(單個鍵/ VAL)的序列映射不是更合適(所以你不」你必須自己解析標量才能得到'角色'和'字符串'嗎?命令是否重要(如果是這樣,那麼你不能僅僅檢查後面的類屬性)?如果你有一個'用戶類',會發生什麼?獲得相同的YAML輸出? – Anthon

+0

@Anthon - 在yaml文件中生成的序列並不重要,只需要yaml文件需要使用正確的字段和其數據類型創建 – PythonUser

回答

0

您可以按列進行迭代,並得到python_types,像這樣

import yaml 

def yaml_from_model(model): 
    columns = {c.name: c.type.python_type.__name__ 
       for c in model.__table__.columns} 
    return yaml.dump({model.__name__.lower(): columns}, 
        default_flow_style=False) 

>> print yaml_from_model(Users) 
>> users: 
    active: int 
    creation_time: datetime 
    email: str 
    id: int 
    name: str 
    password: str 
    role: str