Оптимизация создания / запуска нескольких двигателей SQLalchemy? - PullRequest
0 голосов
/ 26 июня 2019

Предполагая, что у меня есть 30 баз данных в MySQL от db1 до db30.У меня есть скрипт Python, который создаст движок и подключится к one db,

import pandas as pd
import MySQLdb
from sqlalchemy import create_engine

df = pd.read_csv('pricelist.csv')

new_df = df[['date','time','new_price']]

engine = create_engine('mysql+mysqldb://root:python@localhost:3306/db1', echo = False)

new_df.to_sql(name='temporary_table', con=engine, if_exists = 'append', index=False)

with engine.begin() as cnx:
    sql_insert_query_new = 'REPLACE INTO newlist (SELECT * FROM temporary_table)'
    cnx.execute(sql_insert_query_new)
    cnx.execute("DROP TABLE temporary_table")

Теперь, с помощью приведенного выше скрипта, мне понадобится 30 скриптов Python для создания движка и подключения каждого из них.БД для проведения запроса.И чтобы вызвать эти 30 сценариев, мне нужно будет использовать пакетный файл в планировщике задач.

Существует ли оптимизированный способ подключения к нескольким базам данных с помощью одного сценария?Я читаю о сессиях и не думаю, что он может работать с несколькими базами данных.И если у меня есть 30 сценариев Python, выполняющих этот механизм создания и подключения, будут ли какие-либо проблемы с точки зрения производительности обработки?В конце концов, у меня будет сотни дБ в MySQL.

Спасибо!

Примечание. Каждая база данных имеет свои уникальные имена таблиц.

Использование Python 3.7

1 Ответ

0 голосов
/ 26 июня 2019

Я думаю, что вы можете сделать что-то вроде этого:

import pandas as pd
import MySQLdb
from sqlalchemy import create_engine

df = pd.read_csv('pricelist.csv')

new_df = df[['date','time','new_price']]
db_names = [f'db{i}' for i in range(1, 31)]
table_names = ['temporary_table', 'table_name_2', 'table_name_3', ...]

for db, tb in zip(db_names, table_names):
    engine = create_engine(f'mysql+mysqldb://root:python@localhost:3306/{db}', echo=False)

    new_df.to_sql(name=tb, con=engine, if_exists='append', index=False)

    with engine.begin() as cnx:
        sql_insert_query_new = f'REPLACE INTO newlist (SELECT * FROM {tb})'
        cnx.execute(sql_insert_query_new)
        cnx.execute(f"DROP TABLE {tb}")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...