Python 获取SQLAlchemy查询的列名和表名
我正在编写web api,它通过SQL Alchemy查询SQL响应。我想用源表检索查询的列名 下面是一个例子:Python 获取SQLAlchemy查询的列名和表名,python,sqlalchemy,Python,Sqlalchemy,我正在编写web api,它通过SQL Alchemy查询SQL响应。我想用源表检索查询的列名 下面是一个例子: fields = [ StudentsTable.name, SubjectsTable.name ] query = self.session()\ .query(*fields)\ .filter(StudentsTable.id_some_fk == SubjectsTable.id_some_pk) return { "meta":
fields = [
StudentsTable.name,
SubjectsTable.name
]
query = self.session()\
.query(*fields)\
.filter(StudentsTable.id_some_fk == SubjectsTable.id_some_pk)
return {
"meta": {
"fields": query.column_descriptions
},
"data": query.all()
}
“fields”变量将是动态的,例如,用户将能够将其作为字符串列表传递,我希望从SQLAlchemy获得统一的响应,而不是通过迭代fields变量
通过这个query.column\u描述,我得到了预期的列名。但是,这些只是列名,没有源表名。所以,在本例中,我得到了两个“name”列,我不确定它是哪个名称
{
"meta": {
"fields": [
{
"name": "name",
"type": null,
"aliased": false,
"expr": null,
"entity": null
},
{
"name": "name",
"type": null,
"aliased": false,
"expr": null,
"entity": null
}
]
},
"data": []
}
在这种情况下,使用标签可能会有所帮助。比如说
fields = [
StudentsTable.name.label('student_name'),
SubjectsTable.name.label('subject_name')
]
与表对应的类位于“entity”键中。因此,如果要在字段哈希中使用“tablename”键,可以执行以下操作:
fields = [
StudentsTable.name,
SubjectsTable.name
]
query = self.session()\
.query(*fields)\
.filter(StudentsTable.id_some_fk == SubjectsTable.id_some_pk)
descriptions = query.column_descriptions
for description in descriptions:
description['tablename'] = description['entity'].__tablename__
return {
"meta": {
"fields": descriptions
},
"data": query.all()
}
当然,你的报税表是空的,至少在你发布的报税表中是这样。这可能有不同的原因,具体取决于实际的ORM和数据库数据
如果希望列的名称前面加上表的名称,可以将上面的for循环更改为
for description in descriptions:
description['name'] = "{}.{}".format(description['entity'].__tablename__, description['name'])
这正是我需要的东西。谢谢!如果I字段不可由用户更改,那么这将是很好的,不管它们是如何更改的。无论如何,谢谢你。