Skip to content

Instantly share code, notes, and snippets.

@zzzeek
Last active October 7, 2021 01:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zzzeek/6c9544f7c86bd84313c3fda4b1bd96fc to your computer and use it in GitHub Desktop.
Save zzzeek/6c9544f7c86bd84313c3fda4b1bd96fc to your computer and use it in GitHub Desktop.
adapt_on_names demo
from sqlalchemy import Column
from sqlalchemy import create_engine
from sqlalchemy import Integer
from sqlalchemy import MetaData
from sqlalchemy import select
from sqlalchemy import String
from sqlalchemy import Table
from sqlalchemy.orm import aliased
from sqlalchemy.orm import declarative_base
from sqlalchemy.orm import Session
Base = declarative_base()
class A(Base):
__tablename__ = 'a'
id = Column(Integer, primary_key=True)
data = Column(String)
not_a_at_all = Table("a", MetaData(), Column("id"), Column("data"))
e = create_engine("sqlite://", echo=True)
Base.metadata.create_all(e)
s = Session(e)
s.add(A(data="foo"))
s.add(A(data="bar"))
s.commit()
# "not_a_at_all" is a totally unrelated Table object with matching col names
na1 =not_a_at_all.alias("a")
na2 =not_a_at_all.alias("b")
aa = aliased(A, na1, adapt_on_names=True)
bb = aliased(A, na2, adapt_on_names=True)
stmt = select(
aa, bb
).outerjoin_from(aa, bb, aa.id < bb.id)
print(s.execute(stmt).all())
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment