总是在 SQLAlchemy 中使用有什么潜在的陷阱'implicit_returning': False?
在处理定义了触发器的 MSSQL 表时,我多次遇到问题,并且由于数据库处于复制状态,因此所有表都有触发器。
我现在不确定问题到底是什么。它与自动增量字段有关 - 也许是因为我正在预取自动增量值,以便我可以将其插入到另一个表中。
如果我没有'implicit_returning': False为表设置,当我尝试插入值时,我会收到以下错误:
如果 DML 语句包含 OUTPUT 子句而不包含 INTO 子句,则该语句的目标表不能有任何启用的触发器。
那么,如果__table_args__ = {'implicit_returning': False}为了安全起见,我将其放入所有映射的类中呢?
对我来说特别令人沮丧的是,我用于开发和测试的本地数据库不在复制中,并且不需要该选项,但生产数据库被复制,因此当我部署更改时,它们有时不起作用。:)
我有一个分层的数据库结构,我想在一个深度为几个级别(关系)的字段上使用过滤器进行查询.
以下是类声明的示例:
class cTransfer(Base):
__tablename__ = 'mesTransfer'
transferID = Column(UNIQUEIDENTIFIER, primary_key=True, autoincrement=False)
quanID = Column(UNIQUEIDENTIFIER, ForeignKey('mesQuantum.quanID'))
quanObj = relationship('cQuantum', foreign_keys=[quanID], lazy='joined')
class cQuantum(Base):
__tablename__ = 'mesQuantum'
quanID = Column(UNIQUEIDENTIFIER, primary_key=True, autoincrement=False)
orderItemID = Column(UNIQUEIDENTIFIER, ForeignKey('mesOrderItem.orderItemID'))
orderItemObj = relationship('cOrderItem', foreign_keys=[orderItemID], lazy='joined')
class cOrderItem(Base):
__tablename__ = 'mesOrderItem'
orderItemID = Column(UNIQUEIDENTIFIER, primary_key=True, autoincrement=False)
orderID = Column(UNIQUEIDENTIFIER, ForeignKey('mesOrderHeader.orderID'))
orderHeaderObj = relationship('cOrderHeader', foreign_keys=[orderID], lazy='joined')
Run Code Online (Sandbox Code Playgroud)
我想获取其关联的orderID在某个列表中的所有cTransfer.
所以我试着这样做:
q = session.query(cTransfer).filter(cTransfer.quanObj.orderItemObj.orderID.in_([1, 2]))
Run Code Online (Sandbox Code Playgroud)
我得到一个例外:"与"cTransfer.quanObj"相关联的"InstrumentedAttribute"对象和"Comparator"对象都没有属性"orderItemObj"
我怎么能这样查询?