python 重新加载过期对象时,get()查询不会加载joinedloaded关系

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 重新加载过期对象时,get()查询不会加载joinedloaded关系相关的知识,希望对你有一定的参考价值。

from sqlalchemy import Column, BigInteger, ForeignKey, create_engine
from sqlalchemy.orm import relationship, sessionmaker
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()
Session = sessionmaker()

class Foo(Base):
    __tablename__ = 'foo'

    id = Column(BigInteger, primary_key=True, autoincrement=True)
    bars = relationship('Bar', backref='foo', lazy='joined')

class Bar(Base):
    __tablename__ = 'bar'

    foo_id = Column(BigInteger, ForeignKey('foo.id'), primary_key=True)
    bar_id = Column(BigInteger, primary_key=True, autoincrement=False)

class Hello(Base):
    __tablename__ = 'hello'

    id = Column(BigInteger, primary_key=True, autoincrement=True)


def main(sqlalchemy_dabatase_uri):
    engine = create_engine(sqlalchemy_dabatase_uri, echo=True)
    Base.metadata.create_all(bind=engine)
    Session.configure(bind=engine)
    session = Session()

    try:
        foo = Foo()
        session.add(foo)
        session.commit()

        hello = Hello()
        session.add(hello)
        session.commit()

        print('----------')
        session.query(Foo).get(1)
        print('----------')
    except:
        pass

    Base.metadata.drop_all(bind=engine)

if __name__ == '__main__':
    main('mysql+pymysql://local:Password!2@localhost:3306/test_utf8mb4?charset=utf8mb4')
from sqlalchemy import Column, BigInteger, ForeignKey, create_engine
from sqlalchemy.orm import relationship, sessionmaker
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()
Session = sessionmaker()

class Foo(Base):
    __tablename__ = 'foo'

    id = Column(BigInteger, primary_key=True, autoincrement=True)
    bars = relationship('Bar', backref='foo', lazy='joined')

class Bar(Base):
    __tablename__ = 'bar'

    foo_id = Column(BigInteger, ForeignKey('foo.id'), primary_key=True)
    bar_id = Column(BigInteger, primary_key=True, autoincrement=False)


def main(sqlalchemy_dabatase_uri):
    engine = create_engine(sqlalchemy_dabatase_uri, echo=True)
    Base.metadata.create_all(bind=engine)
    Session.configure(bind=engine)
    session = Session()

    try:
        foo = Foo()
        foo.bars.append(Bar(bar_id=1))
        foo.bars.append(Bar(bar_id=2))
        session.add(foo)
        session.commit()

        print('----------')
        foo.bars
        print('----------')
    except:
        pass

    Base.metadata.drop_all(bind=engine)

if __name__ == '__main__':
    main('mysql+pymysql://local:Password!2@localhost:3306/test_utf8mb4?charset=utf8mb4')

以上是关于python 重新加载过期对象时,get()查询不会加载joinedloaded关系的主要内容,如果未能解决你的问题,请参考以下文章

当会话 cookie 在 Laravel 中过期时重新加载站点

Hibernate:它是不是在 get() 之后使用 LockOptions.UPGRADE 重新加载对象

Hibernate框架学习——查询优化

pkg_resources.get_distribution("mymodule").version 重新加载后未更新

如果磁盘上的文件发生更改,如何重新加载 python 类?

如何在不重新加载窗口的情况下单击按钮时在 JSP 中进行更新查询?