sqlalchemy 返回字段名
时间: 2023-08-15 17:16:54 浏览: 88
可以使用 SQLAlchemy 的 `ResultProxy` 对象的 `keys()` 方法来获取查询结果集中的字段名,例如:
```python
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData
engine = create_engine('sqlite:///example.db', echo=True)
metadata = MetaData()
users = Table(
'users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('age', Integer),
)
with engine.connect() as conn:
result = conn.execute(users.select())
print(result.keys()) # 输出 ['id', 'name', 'age']
```
这里的 `result.keys()` 方法返回的是一个包含所有字段名的列表。
相关问题
sqlalchemy 查询结果为空时,如何查询字段名
当查询结果为空时,执行 `result.keys()` 方法会抛出 `AttributeError` 异常,因为 `ResultProxy` 对象没有查询到任何结果,因此没有字段名可供返回。
为了处理这种情况,可以使用 `result.keys()` 方法的一个变体 `result.keys()`,它可以返回一个包含所有字段名的列表或者 `None`,例如:
```python
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData
engine = create_engine('sqlite:///example.db', echo=True)
metadata = MetaData()
users = Table(
'users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('age', Integer),
)
with engine.connect() as conn:
result = conn.execute(users.select().where(users.c.id == 0))
print(result.keys()) # 输出 None
print(result.keys() or []) # 输出 []
```
这里的 `result.keys() or []` 表达式会返回一个包含所有字段名的列表或者空列表 `[]`,这样就可以避免抛出异常了。
sqlalchemy 查询结果为空时,如何输出字段名
当查询结果为空时,可以通过访问查询对象的 `columns` 属性来获取所有的列对象,然后通过遍历列对象来输出所有的字段名。例如:
```python
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData
engine = create_engine('sqlite:///example.db', echo=True)
metadata = MetaData()
users = Table(
'users', metadata,
Column('id', Integer, primary_key=True),
Column('name', String),
Column('age', Integer),
)
with engine.connect() as conn:
result = conn.execute(users.select().where(users.c.id == 0))
if result.returns_rows:
for col in result.columns:
print(col.name)
else:
print([col.name for col in users.columns])
```
这里的 `result.returns_rows` 属性可以判断查询结果是否为空,如果查询结果为空,则遍历表对象的 `columns` 属性来输出所有的字段名。注意,这里使用的是 `users.columns`,而不是 `users.select().columns`,因为 `users.select().columns` 会返回一个空的 `Selectable` 对象,而不是表对象的列对象。
阅读全文