2016-11-04 1 views
1

Je suis en train de mettre en œuvre le regroupement de connexions avec SQLAlchemy et pymysql:objet de connexion non appelable - SQLAlchemy/pymysql

import pymysql 
import sqlalchemy.pool as pool 

# Lifted from the pymysql docs: https://github.com/PyMySQL/PyMySQL/blob/master/example.py 
cnx = pymysql.connect(host='localhost',user='xxxx',password='xxxx',db='mydatabase') 


# Lifted straight from the SQLAlchemy docs http://docs.sqlalchemy.org/en/latest/core/pooling.html: 
cnxPool = pool.QueuePool(cnx, max_overflow=10, pool_size=5) 
conn = cnxPool.connect() 
cursor = conn.cursor() 
cursor.execute("select * from PUBLIC_URLS") 
cursor.close() 

Je reçois simplement l'erreur suivante au bas d'une trace de pile assez longue:

File "/usr/local/lib/python2.7/dist-packages/SQLAlchemy-1.1.3-py2.7-linux-x86_64.egg/sqlalchemy/pool.py", line 279, in <lambda> 
    return lambda crec: creator() 
TypeError: 'Connection' object is not callable 

Quelqu'un aurait-il une suggestion quant à ce qui ne va pas?

Merci

Répondre

1

Le premier argument de QueuePool doit être une fonction qui renvoie une nouvelle connexion. Il sera appelé chaque fois que le pool a besoin d'une nouvelle connexion.

Vous passez une connexion, pas une fonction. Lorsque QueuePool essaie de l'appeler, l'erreur TypeError: 'Connection' object is not callable se produit.

Essayez ceci:

... 
def getconn(): 
    return pymysql.connect(host='localhost',user='xxxx',password='xxxx',db='mydatabase') 

cnxPool = pool.QueuePool(getconn, max_overflow=10, pool_size=5) 
... 
+0

Ah bien sûr, c'est tout. Merci –