Python 检索所有列,但使用SQLAlchemy检索部分列
我正在制作一个用JSON发送特定表的Web服务。 我使用SQLAlchemy与数据库通信 我只想检索用户有权查看的列 有没有办法告诉SQLAlchemy不要检索某些列? 这是不正确的,但大致如下:Python 检索所有列,但使用SQLAlchemy检索部分列,python,sqlalchemy,Python,Sqlalchemy,我正在制作一个用JSON发送特定表的Web服务。 我使用SQLAlchemy与数据库通信 我只想检索用户有权查看的列 有没有办法告诉SQLAlchemy不要检索某些列? 这是不正确的,但大致如下: SELECT * EXCEPT column1 FROM table. result = db_session.query(Table).all() for row in result: row.__delattr(column1) 我知道可以在SELECT语句中只指定一些列,但这并
SELECT * EXCEPT column1 FROM table.
result = db_session.query(Table).all()
for row in result:
row.__delattr(column1)
我知道可以在SELECT语句中只指定一些列,但这并不完全是我想要的,因为我不知道表中的所有列。我只想要所有的专栏,除了一些
我还尝试获取所有列并删除我不想要的列属性,如下所示:
SELECT * EXCEPT column1 FROM table.
result = db_session.query(Table).all()
for row in result:
row.__delattr(column1)
但似乎炼金术不允许这样做。
我得到警告:
Warning: Column 'column1' cannot be null
cursor.execute(statement, parameters)
ok
对你们来说,什么是最优化的方式
谢谢您可以将表中的所有列(不需要的列除外)传递给查询方法
session.query(*[c for c in User.__table__.c if c.name != 'password'])
以下是一个可运行的示例:
#!/usr/bin/env python
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import Session
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
fullname = Column(String)
password = Column(String)
def __init__(self, name, fullname, password):
self.name = name
self.fullname = fullname
self.password = password
def __repr__(self):
return "<User('%s','%s', '%s')>" % (self.name, self.fullname, self.password)
engine = create_engine('sqlite:///:memory:', echo=True)
Base.metadata.create_all(engine)
session = Session(bind=engine)
ed_user = User('ed', 'Ed Jones', 'edspassword')
session.add(ed_user)
session.commit()
result = session.query(*[c for c in User.__table__.c if c.name != 'password']).all()
print(result)
可以将该列设为延迟列。此功能允许仅在直接访问时加载表的特定列,而不是在使用查询查询实体时加载
请参见唯一不好的地方是,由于返回元组,因此会丢失类型和属性名。