use*_*424 4 python postgresql sqlalchemy
我主要使用带有flask(0.12)的SQLAlchemy core(v.1.0.8)表达式语言来创建API调用。对于表格有 20 列的特殊情况,我希望选择除 1 列之外的所有列。这如何在“选择”子句中完成?有没有像“except”这样的东西可以用来代替按名称显式选择列?
通常,您会明确命名所有需要的列,省略数据集中不需要的列。
stmt = sa.select([MyTable.col1, MyTable.col2, ...])
Run Code Online (Sandbox Code Playgroud)
请注意,选择对象接受一个列表。因此,在这里可以使用带有 if 条件的列表理解来获得与except相同的效果:
filt_out = 'col_name_not_wanted'
stmt = sa.select([col for col in MyTable.__table__.columns if col.key != filt_out])
Run Code Online (Sandbox Code Playgroud)
过滤条件甚至可以是另一个函数,因此您可以有更复杂的逻辑。
例子:
def filt(col):
if col.index:
return col.primary_key is True
elif 'secret' in col.key:
return False
else:
return True
stmt = sa.select([col for col in MyTable.__table__.columns if filt(col)])
Run Code Online (Sandbox Code Playgroud)
上面的代码片段假设MyTable是一个 sqlalchemy 声明式映射。如果您有 sqlalchemy 表,请替换MyTable.__table__为Mytable
这是一个完整的例子:
import sqlalchemy as sa
import sqlalchemy.ext.declarative as dec
b = dec.declarative_base()
class M(b):
__tablename__ = 'm'
id = sa.Column(sa.Integer, primary_key=True)
col1 = sa.Column(sa.Integer)
stmt = sa.select([col for col in M.__table__.columns if col.key != 'col1'])
print(stmt)
# prints:
SELECT m.id
FROM m
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2799 次 |
| 最近记录: |