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])