为多个数据库设置MySQLdb连接对象

时间:2012-02-03 22:59:45

标签: python database-connection mysql-python

这个问题可能很无聊。

而不是对MySQLdb连接对象进行硬编码:例如,

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

如何设置它以便我可以从列表或其他变量中指定db_name(或连接对象的任何其他部分)。 E.g:

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

3 个答案:

答案 0 :(得分:6)

您可以设置一个函数,该函数将根据传入的名称返回新的数据库连接。

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

然后在需要使用新数据库时调用get_db_connection。

更好的是,您可以尝试db.select_db('my_new_databasename')在同一连接中从一个数据库切换到另一个数据库。假设db是来自MySQLdb.connect()调用的连接对象。这意味着您不需要每次都建立新连接。

值得注意的是,创建数据库连接非常昂贵,因此请尽量避免创建它们并放弃它们。

答案 1 :(得分:2)

您可以设置字典来存储连接对象

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

然后,您可以使用字典访问数据库,或者指定本地也指向连接。

current_db = db_dict['db_name']

答案 2 :(得分:0)

我主要使用lambdas来实现更快的方法(在编写代码时很快,感觉更加pythonic)。

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

然后您可以通过以下方式访问数据库:

mydb = db("MyDb")