优化创建/运行多个SQLalchemy引擎?

时间:2019-06-26 01:17:43

标签: python mysql sqlalchemy mysql-python

假设我在MySQL中有30个数据库,从db1到db30。我有一个python脚本,它将创建引擎并连接到一个数据库,

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 :(得分:0)

我认为您可以执行以下操作:

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}")