【问题标题】:How to get column name from sqlalchemy?如何从 sqlalchemy 获取列名?
【发布时间】:2019-02-14 11:47:24
【问题描述】:

鉴于我的模型

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

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

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

有什么想法可以存档吗?谢谢

【问题讨论】:

    标签: python-2.7 sqlalchemy


    【解决方案1】:

    您正在搜索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)
    

    那么,你应该使用这个表达式:

    customer_query.column_descriptions
    

    输出

    [
        {
            '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
        }
    ]
    

    但是,如果你想要所有的钥匙,你应该:

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

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

    其他选项:

    CUSTOMER.__table__.columns.keys()
    CUSTOMER.metadata.columns.keys()
    

    【讨论】:

    • 从您的示例中,我们只能获取一列“ID”,如何获取所有列?谢谢。
    • @HouyNarun 我添加了这个案例
    • 完美 :) 我更喜欢选项CUSTOMER.__table__.columns.keys() CUSTOMER.metadata.columns.keys()。问候,非常感谢。
    • 我有类似(等效)的东西,但不适用于命令 column_descriptions,确实我得到了模型名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 2019-10-05
    • 2011-09-21
    • 2012-02-15
    • 2023-03-24
    • 2016-12-20
    • 2015-12-31
    相关资源
    最近更新 更多