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

2024-04-26 04:29:57 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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脚本来创建引擎,并连接每个db来执行查询。要调用这30个脚本,我需要在任务调度器上使用批处理文件。你知道吗

有没有一种优化的方法可以用一个脚本连接到多个数据库?我仔细阅读了会话,认为它不能容纳多个数据库。如果我有30个python脚本做这个创建引擎和连接,在处理性能方面会有什么问题吗?最终,我将在MySQL中拥有数百个db。你知道吗

谢谢!你知道吗

注意:每个数据库都有自己唯一的表名。你知道吗

使用Python 3.7


Tags: 引擎import脚本数据库dfnewsqlas
1条回答
网友
1楼 · 发布于 2024-04-26 04:29:57

我想你可以这样做:

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

相关问题 更多 >