2012-02-03 8 views
5

Câu hỏi này có khả năng không đúng.thiết lập đối tượng kết nối MySQLdb cho nhiều cơ sở dữ liệu

Thay vì thể xác định rõ đối tượng kết nối MySQLdb: ví dụ,

db = MySQLdb.connect('localhost','name','pwrd','db_name') 

Làm thế nào để thiết lập nó vì vậy tôi có thể xác định db_name (hoặc bất kỳ phần nào khác của đối tượng kết nối) từ một danh sách hoặc một số biến khác . Ví dụ:

for NAME from list_of_names: 
    db = MySQLdb.connect('localhost', 'name', 'pwrd', NAME) 

Trả lời

6

Bạn có thể thiết lập một chức năng mà sẽ trả về một kết nối cơ sở dữ liệu mới dựa trên tên thông qua vào

def get_db_connection(database_name): 
    return MySQLdb.connect('localhost', 'name', 'pwrd', database_name) 

và sau đó gọi get_db_connection bất cứ khi nào bạn cần sử dụng một cơ sở dữ liệu mới..

Tốt hơn, bạn có thể thử db.select_db('my_new_databasename') để chuyển từ cơ sở dữ liệu này sang cơ sở dữ liệu khác trong cùng một kết nối. Điều này giả định db là đối tượng kết nối của bạn từ cuộc gọi MySQLdb.connect(). Điều này có nghĩa là bạn không cần phải tạo kết nối mới mỗi lần.

Lưu ý rằng việc tạo kết nối cơ sở dữ liệu là tốn kém, vì vậy hãy cố gắng tránh tạo và ném chúng đi khi bỏ.

2

Bạn có thể thiết lập một từ điển để lưu trữ kết nối của bạn đối tượng

db_dict = {} 
for NAME from list_of_names: 
    db_dict[NAME] = MySQLdb.connect('localhost', 'name', 'pwrd', NAME) 

Sau đó, bạn có thể truy cập vào db bằng cách sử dụng từ điển hoặc gán một địa phương cũng để trỏ đến các kết nối.

current_db = db_dict['db_name'] 
0

Tôi chủ yếu sử dụng lambdas để có cách tiếp cận nhanh hơn (viết nhanh mã cảm giác, cũng cảm thấy có nhiều thán khí hơn).

db = lambda(db): MySQLdb.connect(host="127.0.0.1",user="user",passwd="pwd",db=db) 

Sau đó, bạn có thể dễ dàng truy cập vào cơ sở dữ liệu theo:

mydb = db("MyDb")