python - with_entities 指的是别名为
问题描述
这是原始问题的编辑版本,带有一个独立的示例。
from sqlalchemy import Column, Integer, String, create_engine, func
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
fullname = Column(String)
nickname = Column(String)
engine = create_engine('sqlite://', echo=True)
Session = sessionmaker(bind=engine)
session = Session()
Base.metadata.create_all(engine)
session.add_all([
User(name='wendy', fullname='Wendy Williams'),
User(name='mary', fullname='Mary Contrary'),
User(name='fred', fullname='Fred Flintstone', nickname='freddy')])
session.commit()
items = session.query(
User.id, User.name,
func.coalesce(User.nickname, 'Nicky').label('nickname'))
# Checking that with_entities works on original data set
subset_items = session.query(
User.id, User.name)\
.with_entities(User.name, User.nickname)\
.all()
print(subset_items)
# items will be used elsewhere....
# Wanted: a subset with columns fullname and nickname only
# Result is wrong, it does not use coalesce result
special_items = items\
.with_entities(User.fullname, User.nickname) \
.all()
print(special_items)
如何使用 .with_entities 来引用项目?以下失败
.with_entities(items.fullname, items.nickname) \
@Nick 在回复原始问题时建议的带有引号的变体也是如此。
解决方案
由于没有回复,我将其发布在SQLAlchemy的社区网站上。答案出乎意料的尴尬:
q = q.with_entities(q.column_descriptions[1]['expr'], q.column_descriptions[2]['expr'])
推荐阅读
- oracle - 如何使用当前年份将“MMDD”格式的字符串转换为日期
- asp.net-mvc - 在 dropwdownlist mvc 内进行多项选择
- c# - 从一个 TXT 文件写入和读取多个文本框。C#
- sql - 在表上使用 Pivot 函数时出现缺少逗号错误
- java - 为什么这个静态绑定不能像我预期的那样工作?
- ios - 用 2 个弧线修剪 UIView
- php - 如何通过php获取页面的HTML资源
- sql-server - 如何从 Visual Studio Mac 连接到 SQL Server?
- python - 在 Python 中清空字典和列表
- javascript - 我从时间选择器中选择的时间未在 TextEditingController 上设置?