0
我們正在實施帶有SQLAlchemy的工作流引擎。在我們的模型 兩個表是:在sqlalchemy的情況下選擇語句
class DbAttribute(Base):
__tablename__ = "db_dbattribute"
id = Column(Integer, primary_key = True)
dbnode_id = Column(Integer, ForeignKey('db_dbnode.id'))
key = Column(String(255))
datatype = Column(String(10))
tval = Column(String, default='')
fval = Column(Float, default=None, nullable=True)
ival = Column(Integer, default=None, nullable=True)
bval = Column(Boolean, default=None, nullable=True)
dval = Column(DateTime, default=None, nullable=True)
class DbNode(Base):
__tablename__ = "db_dbnode"
id = Column(Integer, primary_key=True)
uuid = Column(UUID(as_uuid=True), default=uuid_func)
type = Column(String(255), index=True)
label = Column(String(255), index=True, nullable=True)
description = Column(Text(), nullable=True)
ctime = Column(DateTime(timezone=True), default=timezone.now)
mtime = Column(DateTime(timezone=True), default=timezone.now)
屬性是通過dbnode_id外鍵關聯到一個節點。 我現在正在處理一個將返回屬性值(例如tval)的查詢,如果由於該鍵不正確而導致該行不存在,則返回None。這是工作的別名類現在:
select_stmt =select([aliased_attributes.tval]).select_from(
aliased_attributes
).where(and_(
aliased_attributes.key==attrkey,
aliased_attributes.dbnode_id==aliased_node.id
))
exists_stmt = exists(select_stmt)
entity = case([
(
exists_stmt,
select_stmt
),
(
text('true'),
None
)
])
這與下面的錯誤,現在退出:
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) syntax error at or near "SELECT"
我使用SQLAlchemy的1.0.12和PostgreSQL 9.4。 什麼我錯過或其它方面,本可以做的更好任何幫助是極大的讚賞
乾杯
非常感謝。一個簡單的外聯(就像你的解決方案)在簡單情況下工作正常。但是,如果您必須將多個DbNode實體連接在一起,則屬性的投影必須成爲子查詢。這正是我所苦苦掙扎的。我應該更具體地說,對不起 – nikka
@nikka:你也可以執行多個連接。你只需要使用別名。請參閱[使用別名](http://docs.sqlalchemy.org/en/rel_1_0/orm/tutorial.html#using-aliases) – van
非常感謝,我會給它一個機會! – nikka