0

我试图实现mysql池,但有一个问题: 我从一个env变量解析mysql连接凭证,这基本上是一个字典,并有多个数据库凭证。问题在池中多个mysql连接

dict={'db1': {'username':**** ,'password':**** ,'database':*****,'host':****,'uri': mysql url with username ,password,database}, 
     'db2': {'username': ****, 'hostname': *****,host: ******, 'password': ***,'uri': mysql url with username ,password,database}} 

global conn 
conn={} 
def connect(): 
cred=json.loads(os.environ['dict']) 
for db in cred: 
    multiple_databases=cred[db]['uri'] 
    url=urlparse.urlparse(multile_databases)   
    conn[db]={'user':'url.username','password':'url.password','host':'url.hostname','database':'url.path[1:]'} 
    cnx = mysql.connector.connect(pool_name = "mypool", 
          pool_size = 3, 
          **conn[db]) 
connect() 

问题在这里只有一个连接正在打开,它是针对数据库'db2'的。

当我执行相同的代码而没有执行池,两个连接工作正常/打开。

for db in cred: 
    multiple_databases=cred[db]['uri'] 
    url=urlparse.urlparse(multile_databases)   
    conn[db]=mysql.connector.connect(user=url.username,password=url.password,host=url.hostname,database=url.path[1:]) 

问题:在执行池时,为什么两个连接都没有打开?

回答

0

想通了

def conn1(): 
pool_size = 3 
ser=json.loads(os.environ['dict']) 
for db in ser: 
    instance_1=ser[db]['uri'] 
    url=urlparse.urlparse(instance_1) 
    pool[db]=PooledDB(mysql.connector, pool_size, user=url.username, password=url.password, host=url.hostname, database=url.path[1:]) 
    cnx=[None,]*pool_size 
    for i in xrange(0,pool_size): 
cnx[i]=pool[db].connection() 
cursor=cnx[i].cursor() 
cursor.execute('SELECT CONNECTION_ID()') 
print "Cnx %d has ID %d" % (i+1,cursor.fetchone()[0])