第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

SQL證書化學(xué)ORM不存在:表別名范圍

SQL證書化學(xué)ORM不存在:表別名范圍

慕田峪7331174 2022-09-20 15:48:43
我有三個(gè)實(shí)體, , , , 其中鏈接到 s ()。我想找到那些沒有實(shí)例的實(shí)例,該實(shí)例未連接到.ABCCABA-*C-BACB我無法提出一個(gè)SQLAlchemy查詢來為我做到這一點(diǎn),我開始認(rèn)為編譯器有問題。以下單元測試對此進(jìn)行了說明:from sqlalchemy.ext.declarative import declarative_basefrom sqlalchemy.orm import sessionmakerfrom sqlalchemy import Column, Integer, create_engine, literal_sql_engine = create_engine('sqlite:///:memory:')session = sessionmaker(bind=_sql_engine)()def test_model():    Base = declarative_base()    class A(Base):        __tablename__ = 'a'        id = Column(Integer, primary_key=True)    class B(Base):        __tablename__ = 'b'        id = Column(Integer, primary_key=True)    class C(Base):        __tablename__ = 'c'        a = Column(Integer, primary_key=True)        b = Column(Integer, primary_key=True)    Base.metadata.create_all(_sql_engine)    a = [A(id=10),      A(id=20)]    c = [C(a=10, b=11), C(a=20, b=21)]    b = [B(id=11)]    session.add_all(a + c + b)    session.commit()    q = session.query(A).filter(        A.id < literal(100),        ~(            session.query(C)                .filter(                A.id == C.a,                ~(                    session.query(B)                    .filter(                        B.id == C.b,                    ).exists()                )            ).exists()        )    )    print(q.statement)    print(len(q.all()))    assert len(q.all()) == 1測試期望一個(gè)結(jié)果,但它得到零。打印的 SQL 語句是SELECT a.id FROM a WHERE a.id < :param_1 AND NOT (EXISTS (SELECT 1 FROM c WHERE NOT (EXISTS (SELECT 1 FROM b, a WHERE b.id = c.b AND a.id = c.a))))現(xiàn)在,在我看來,問題出在第三個(gè)語句上。 并覆蓋上面的別名,并與前面的約束斷開連接。FROMba這是正確的嗎?這就是 SQL 中的作用域的工作方式嗎?如果是這樣,我是在使用SQL算法時(shí)犯了錯誤,還是這是一個(gè)錯誤?(單元測試使用 SQLite,但最終結(jié)果應(yīng)在后灰色SQL 中運(yùn)行。
查看完整描述

1 回答

?
慕絲7291255

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊

多虧了 github 上的 zzzeek,我找到了答案:別名在第二次嵌套后在子查詢中隱藏。如果我們不想要這個(gè),我們使用相關(guān)的子查詢。

固定單元測試:

from sqlalchemy.ext.declarative import declarative_base

from sqlalchemy.orm import sessionmaker, aliased

from sqlalchemy import Column, Integer, create_engine, literal


_sql_engine = create_engine('sqlite:///:memory:')

session = sessionmaker(bind=_sql_engine)()



def test_model():

    Base = declarative_base()


    class A(Base):

        __tablename__ = 'a'

        id = Column(Integer, primary_key=True)


    class B(Base):

        __tablename__ = 'b'

        id = Column(Integer, primary_key=True)


    class C(Base):

        __tablename__ = 'c'

        a = Column(Integer, primary_key=True)

        b = Column(Integer, primary_key=True)



    Base.metadata.create_all(_sql_engine)


    a = [A(id=10),      A(id=20)]

    c = [C(a=10, b=11), C(a=20, b=21)]

    b = [B(id=11)]


    session.add_all(a + c + b)

    session.commit()


    q = session.query(A).filter(

        A.id < literal(100),

        ~(

            session.query(C)

                .filter(

                A.id == C.a,

                ~(

                    session.query(B)

                    .filter(

                        B.id == C.b

                    ).exists().correlate(A,C)

                )

            ).exists()

        )

    )


    print(q.statement)

    print(len(q.all()))


    assert len(q.all()) == 1


查看完整回答
反對 回復(fù) 2022-09-20
  • 1 回答
  • 0 關(guān)注
  • 108 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號