настроить объект подключения MySQLdb для нескольких баз данных - PullRequest
5 голосов
/ 04 февраля 2012

Этот вопрос скорее всего нубистский.

Вместо жесткого кодирования объекта соединения MySQLdb: например,

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

Как мне его настроить, чтобы я мог указать имя_базы (или любую другую часть объекта соединения) из списка или какой-либо другой переменной. Например:

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

Ответы [ 3 ]

6 голосов
/ 04 февраля 2012

Вы можете настроить функцию, которая будет возвращать новое соединение с базой данных на основе переданного имени.

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(). Это означает, что вам не нужно каждый раз создавать новое соединение.

Следует отметить, что создание соединений с базой данных является дорогостоящим, поэтому старайтесь не создавать их и не выбрасывать их по собственному желанию.

2 голосов
/ 04 февраля 2012

Вы можете настроить словарь для хранения объектов ваших соединений

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

Затем вы можете получить доступ к БД с помощью словаря или назначить локальное, чтобы также указать на соединение.

current_db = db_dict['db_name']
0 голосов
/ 05 сентября 2016

Я в основном использую лямбды для более быстрого подхода (быстрый в смысле написания кода, также он кажется более питоническим).

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

Тогда вы можете просто получить доступ к базе данных:

mydb = db("MyDb")
...