假设我在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
答案 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}")