如何将ORM对象或此类对象列表与数据库“重新连接”?

2024-04-25 19:17:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我的理解是,以下代码将返回错误:

from src.mysqlClient import db_session
from src.mysqlClient.models import AdvertDom

with db_session() as session:
    advert_doms = session.query(AdvertDom).all()

for advert_dom in advert_doms:
    print(advert_dom.HTMLContent)

我的理解是,错误是由会话结束引起的,会话结束会断开advert_doms列表与数据库的连接


如果我有一个返回ORM对象或ORM对象列表的函数,那么我以后如何让这些对象与数据库“重新连接”,以便上面的代码能够工作

这里有一个例子来说明我的意思:

from src.mysqlClient import db_session
from src.mysqlClient.models import AdvertDom

def function_one():
    with db_session() as session:
        advert_doms = session.query(AdvertDom).all()
    return advert_doms

def function_two()
    advert_doms = function_one()

    # TODO: Do something here so that the code below will work.

    for advert_dom in advert_doms:
        print(advert_dom.HTMLContent)

Tags: 对象代码fromimportsrcdbmodelssession
1条回答
网友
1楼 · 发布于 2024-04-25 19:17:44

答案是创建一个新会话并执行session.add(orm_object)

from src.mysqlClient import db_session
from src.mysqlClient.models import AdvertDom

def function_one():
    with db_session() as session:
        advert_doms = session.query(AdvertDom).all()
    return advert_doms

def function_two()
    advert_doms = function_one()
    with db_session() as session:  # <  New line of code
        for advert_dom in advert_doms:
            session.add(advert_dom)  # <  New line of code
            print(advert_dom.HTMLContent)

避免此问题的另一种方法是只使用一个全局会话对象,在两个函数都运行之前,该对象不会关闭

相关问题 更多 >