Skip to content

Instantly share code, notes, and snippets.

@ThiefMaster
Created August 11, 2015 16:02
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 ThiefMaster/d6c16d26c77507612b0d to your computer and use it in GitHub Desktop.
Save ThiefMaster/d6c16d26c77507612b0d to your computer and use it in GitHub Desktop.
from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class A(Base):
__tablename__ = 'test_a'
id = Column(Integer, primary_key=True)
class B(Base):
__tablename__ = 'test_b'
id = Column(Integer, primary_key=True)
a_id = Column(Integer, ForeignKey('test_a.id'))
c_id = Column(Integer, ForeignKey('test_c.id'))
a = relationship('A', backref=backref('b'))
c = relationship('C', backref=backref('b'))
class C(Base):
__tablename__ = 'test_c'
id = Column(Integer, primary_key=True)
e = create_engine('sqlite:///:memory:', echo=True)
Base.metadata.create_all(e)
s = Session(e)
s.add(B(a=A(), c=C()))
s.commit()
a = s.query(A).options(joinedload('b').noload('c')).all()
print a[0]
print a[0].b[0]
print a[0].b[0].c
@ThiefMaster
Copy link
Author

2015-08-11 18:14:51,449 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1
2015-08-11 18:14:51,449 INFO sqlalchemy.engine.base.Engine ()
2015-08-11 18:14:51,449 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS VARCHAR(60)) AS anon_1
2015-08-11 18:14:51,449 INFO sqlalchemy.engine.base.Engine ()
2015-08-11 18:14:51,450 INFO sqlalchemy.engine.base.Engine PRAGMA table_info("test_c")
2015-08-11 18:14:51,450 INFO sqlalchemy.engine.base.Engine ()
2015-08-11 18:14:51,450 INFO sqlalchemy.engine.base.Engine PRAGMA table_info("test_b")
2015-08-11 18:14:51,450 INFO sqlalchemy.engine.base.Engine ()
2015-08-11 18:14:51,450 INFO sqlalchemy.engine.base.Engine PRAGMA table_info("test_a")
2015-08-11 18:14:51,450 INFO sqlalchemy.engine.base.Engine ()
2015-08-11 18:14:51,450 INFO sqlalchemy.engine.base.Engine
CREATE TABLE test_c (
        id INTEGER NOT NULL,
        PRIMARY KEY (id)
)


2015-08-11 18:14:51,450 INFO sqlalchemy.engine.base.Engine ()
2015-08-11 18:14:51,451 INFO sqlalchemy.engine.base.Engine COMMIT
2015-08-11 18:14:51,451 INFO sqlalchemy.engine.base.Engine
CREATE TABLE test_a (
        id INTEGER NOT NULL,
        PRIMARY KEY (id)
)


2015-08-11 18:14:51,451 INFO sqlalchemy.engine.base.Engine ()
2015-08-11 18:14:51,451 INFO sqlalchemy.engine.base.Engine COMMIT
2015-08-11 18:14:51,451 INFO sqlalchemy.engine.base.Engine
CREATE TABLE test_b (
        id INTEGER NOT NULL,
        a_id INTEGER,
        c_id INTEGER,
        PRIMARY KEY (id),
        FOREIGN KEY(a_id) REFERENCES test_a (id),
        FOREIGN KEY(c_id) REFERENCES test_c (id)
)


2015-08-11 18:14:51,451 INFO sqlalchemy.engine.base.Engine ()
2015-08-11 18:14:51,451 INFO sqlalchemy.engine.base.Engine COMMIT
2015-08-11 18:14:51,455 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2015-08-11 18:14:51,455 INFO sqlalchemy.engine.base.Engine INSERT INTO test_a DEFAULT VALUES
2015-08-11 18:14:51,455 INFO sqlalchemy.engine.base.Engine ()
2015-08-11 18:14:51,455 INFO sqlalchemy.engine.base.Engine INSERT INTO test_c DEFAULT VALUES
2015-08-11 18:14:51,455 INFO sqlalchemy.engine.base.Engine ()
2015-08-11 18:14:51,456 INFO sqlalchemy.engine.base.Engine INSERT INTO test_b (a_id, c_id) VALUES (?, ?)
2015-08-11 18:14:51,456 INFO sqlalchemy.engine.base.Engine (1, 1)
2015-08-11 18:14:51,456 INFO sqlalchemy.engine.base.Engine COMMIT
2015-08-11 18:14:51,457 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
2015-08-11 18:14:51,458 INFO sqlalchemy.engine.base.Engine SELECT test_a.id AS test_a_id, test_b_1.id AS test_b_1_id, test_b_1.a_id AS test_b_1_a_id, test_b_1.c_id AS test_b_1_c_id
FROM test_a LEFT OUTER JOIN test_b AS test_b_1 ON test_a.id = test_b_1.a_id
2015-08-11 18:14:51,458 INFO sqlalchemy.engine.base.Engine ()
<__main__.A object at 0x7ffbc15a65d0>
<__main__.B object at 0x7ffbc15a6710>
2015-08-11 18:14:51,458 INFO sqlalchemy.engine.base.Engine SELECT test_c.id AS test_c_id
FROM test_c
WHERE test_c.id = ?
2015-08-11 18:14:51,458 INFO sqlalchemy.engine.base.Engine (1,)
<__main__.C object at 0x7ffbc15a6c90>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment