Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用sqlalchemy connectionpool创建会话?_Python_Mysql_Session_Sqlalchemy_Connection Pooling - Fatal编程技术网

Python 如何使用sqlalchemy connectionpool创建会话?

Python 如何使用sqlalchemy connectionpool创建会话?,python,mysql,session,sqlalchemy,connection-pooling,Python,Mysql,Session,Sqlalchemy,Connection Pooling,我在一起使用引擎、连接池和会话时遇到问题。我试图做的是创建一个应用程序范围的引擎和池。然后根据需要从connectionpool创建会话。下面是我的代码示例: import sqlalchemy.pool as pool engine = createEngine(pool_size, pool.QueuePool) Session = sessionmaker() def getConnection(): try: return engine.connect()

我在一起使用引擎、连接池和会话时遇到问题。我试图做的是创建一个应用程序范围的引擎和池。然后根据需要从connectionpool创建会话。下面是我的代码示例:

import sqlalchemy.pool as pool
engine = createEngine(pool_size, pool.QueuePool)
Session = sessionmaker()
def getConnection():
    try:
        return engine.connect()
    except:
        return False
mypool = pool.QueuePool(getConnection(), max_overflow, pool_size)
conn = mypool.connect()
session = Session(bind=conn)
result = session.query(Models.Features).all()
在上面的代码会话中,query()给出了error“error:'function'对象没有属性'context\u connect”

我在页面中使用了标题为“使用备用参数创建临时会话对象”下的段落作为参考。以下是我在上面页面中使用的代码示例:

# at the module level, the global sessionmaker,
# bound to a specific Engine
Session = sessionmaker(bind=engine)

# later, some unit of code wants to create a
# Session that is bound to a specific Connection
conn = engine.connect()
session = Session(bind=conn)

在上面的示例中,他们正在使用连接绑定会话。我想知道在使用会话时是否需要使用connectionpool。如果需要,那么如何创建connectionpool并使用从池中获得的连接绑定会话。

您没有调用引擎。connect()方法正确。如果像这样添加括号:

...
mypool = pool.QueuePool(getConnection(), max_overflow, pool_size)
conn = mypool.connect()
session = Session(bind=conn)
...

它应该能正常工作。

一个诚实的问题:为什么要为你只需使用
引擎本身就可以实现的目标而费劲呢?在你的示例代码中,你似乎基本上是在
引擎所持有的池上添加了一个冗余的
队列池
。此外,这似乎是一个“输入错误”问题,因为答案是“添加括号”。@IljaEverilä。正如您所提到的,我可以通过使用引擎来实现池,您能解释一下吗?我所理解的是,创建一个启用了池的引擎,并将会话绑定到引擎,而不是连接。对吗?因此,它后面将使用池中的连接。我会尝试一下并更新。谢谢。问题是你调用了一个不应该调用的函数,即
pool.QueuePool(getConnection(),…)
,而没有在应该调用的地方调用它:
conn=mypool.connect
。我试图从池中创建一个连接,并将其与会话绑定。我没有试图用从引擎获得的连接绑定会话。在我使用的引用中,他们使用的是来自引擎的连接对象,所以我假设会话也可以绑定到从池中获得的连接。