У меня есть базы данных, содержащие таблицы, которые не были созданы с использованием SQLALchemy ORM, я просто запустил запрос в терминале mysql, чтобы создать их, и какое-то время я использовал mysql -connector и MySQLdb
драйвер, теперь я Я хочу перейти на драйвер pymysql
и начать использовать SQLAlchemy ORM.
, поэтому я узнал о расширении Automap .
Так что мне не нужно создавать класс модели. однако я также написал этот кусок пирога , чтобы получить объект соединения, который я хочу изменить таким образом, чтобы мне не нужно было указывать имя базы данных, и использую с pymsql
, как показано ниже:
def getconn():
return pymysql.connections.Connection(**_CFG)
mypool = pool.QueuePool(getconn, max_overflow=10, pool_size=5)
engine = create_engine('mysql+pymysql://', convert_unicode=True, echo=False, pool=mypool)
Base = automap_base()
Base.prepare(engine, reflect=True)
но тогда Base.classes
не дает мне имена таблиц. но если я укажу имя базы данных в строке подключения, передаваемой create_engine
, она будет работать нормально,
, поэтому мой вопрос состоит в том, как я могу указать имя базы данных позже, а затем вызвать Base.prepare(engine, reflect=True)
, чтобы мой объект подключения всегда существует, сохраняя зарезервированный размер пула, и база данных изменяется, и я запрашиваю / обновляю таблицу во вновь установленной базе данных!
Я попытался вызвать (но не сработало.)
engine.execute("USE databasename")
, чтобы позже вызвать
Base = automap_base()
Base.prepare(engine, reflect=True)