如何从 sqlalchemy 获取列名?

Hou*_*run 3 sqlalchemy python-2.7

鉴于我的模型

class CUSTOMER():
    ID              =   db.Column(db.String(12), primary_key=True)
    PotentialCustomer   =   db.Column(db.String(12))
    FirstNameEn     =   db.Column(db.String(35))
    LastNameEn      =   db.Column(db.String(35))
    FirstNameKh     =   db.Column(db.String(35))
    LastNameKh      =   db.Column(db.String(35))
    Salutation      =   db.Column(db.String(4))
    Gender          =   db.Column(db.String(6))
    DateOfBirth     =   db.Column(db.String(10))
    CountryOfBirth  =   db.Column(db.String(2))
    Nationality     =   db.Column(db.String(2))
    ProvinceOfBirth =   db.Column(db.String(3))
Run Code Online (Sandbox Code Playgroud)

我想获取模型的列表列名称,CUSTOMER()以便我可以循环访问该列名称?

我尝试通过谷歌浏览,但不知道如何存档?

知道我可以存档吗?谢谢

Víc*_*pez 6

您正在寻找column_descriptions().

当您使用 时column_descriptions(),您将获得有关查询中返回的列的元数据。

在你的情况下:

customer_alias = aliased(CUSTOMER, name='customer2')
#If you want a single field (CUSTOMER.ID)
customer_query = con.query(CUSTOMER, CUSTOMER.ID, customer_alias)
Run Code Online (Sandbox Code Playgroud)

然后,你应该使用这个表达式:

customer_query.column_descriptions
Run Code Online (Sandbox Code Playgroud)

输出

[
    {
        'name':'CUSTOMER',
        'type':CUSTOMER,
        'aliased':False,
        'expr':CUSTOMER,
        'entity': CUSTOMER
    },
    {
        'name':'ID',
        'type':String(),
        'aliased':False,
        'expr':CUSTOMER.ID,
        'entity': CUSTOMER
    },
    {
        'name':'customer2',
        'type':CUSTOMER,
        'aliased':True,
        'expr':customer_alias,
        'entity': customer_alias
    }
]
Run Code Online (Sandbox Code Playgroud)

但是,如果您想要所有密钥,您应该:

#we just want one field:
query = session.query(CUSTOMER).filter_by(id=1)
#then:
conn.execute(query).keys()
Run Code Online (Sandbox Code Playgroud)

你会得到列名['id',PotentialCustomer, FirstNameEN...]

另一种选择:

CUSTOMER.__table__.columns.keys()
CUSTOMER.metadata.columns.keys()
Run Code Online (Sandbox Code Playgroud)