2014-06-25 3 views
0

MySQL Connector/Python을 사용하고 있습니다. 개체를 생성하는 개체가 있고 그 개체 중 일부는 더 많은 개체를 생성합니다. 지금은 약 300 개의 물체로 끝을 맺고 있습니다. 주어진 방식대로 300 개의 데이터베이스 연결을 의미합니다. 한번 연결 만하면 연결이 가능합니까?개체간에 MySQL 커넥터를 공유 할 수 있습니까?

는 나는 이런 식으로 뭔가를 찾고 구상 :

class MyObject(dict): 
    def __init__(self, row, conn): 
     self.conn = conn 
     self.cursor = self.conn.cursor() 
     # pass the connection/cursor on to some more objects 

def getObjects(query, args): 
    conn = mysql.connector.connect(user="user", password="password", host="localhost", port="12345", database="database") 
    cursor = conn.cursor() 
    cursor.execute(query, args) 
    row = cursor.fetchone() 

    myObjects = [] 
    while rowDict is not None: 
     myObj = MyObject(row, conn) 
     myObjects.append(myObj) 
     row = cursor.fetchone() 

    cursor.close() 
    conn.close() 

    return myObjects 

을하지만이 방법으로 그것을 구현할 때, 나는 InternalError: Unread result found.를 얻을.

답변

0

글쎄 대답은 : 풀 사용입니다. 연결 풀링을 구현하면 300에서 10으로 연결이 끊어졌습니다. 기본적으로 다음과 같이 보입니다.

def getConnectionPool(): 
    config = { 
       "user":"user", 
       "password":"password", 
       "host":"localhost", 
       "port":"12345", 
       "database":"database" 
       } 
    pool = mysql.connector.pooling.MySQLConnectionPool(pool_name="MyPool", pool_size=10, **config) 
    return pool 

def getAllObjects(): 
    pool = getConnectionPool() 
    newObject = NewObject(pool) 

class NewObject(object): 
    def __init__(self, pool): 
     self.conn = pool.get_connection() 
     # cursor, etc.