如果 sql table 存在于 运行 python 中的代码之后,如何自动更改名称?
How to automatically change name if sql table exists after running the code in python?
我正在尝试 运行 每天一次此代码来记录数据帧以制作历史数据集。
我已将 mysql 与 pymysql 连接,使用 pymysql 将我的 pandas 数据帧保存到 mysql 并转换 pandas 数据帧使用 .to_sql 方法进入 sql。
但是,如果我 运行 此代码 2 次,table 的名称会重叠并且不会 运行 第二次。
因此,每次 运行 这段代码时,我都需要更改 table 的名称(data_day001、data_day002、data_day003...)。
# Credentials to database connection
hostname="hostname"
dbname="sql_database"
uname="admin"
pwd="password"
# Create SQLAlchemy engine to connect to MySQL Database
engine = create_engine("mysql+pymysql://{user}:{pw}@{host}/{db}"
.format(host=hostname, db=dbname, user=uname, pw=pwd))
# Convert dataframe to sql table
channel_data.to_sql('data_day001', engine, index=False)
请告诉我如何解决这个问题。
非常感谢您。
使用inspect
函数:
from sqlalchemy import create_engine, inspect
def get_table_name(engine):
names = inspect(engine).get_table_names()
return f"data_day{len(names):03}"
engine = create_engine(...)
channel_data.to_sql(get_table_name(engine), engine, index=False)
几天后:
>>> inspect(engine).get_table_names()
['data_day000', 'data_day001', 'data_day002', 'data_day003', 'data_day004']
我正在尝试 运行 每天一次此代码来记录数据帧以制作历史数据集。
我已将 mysql 与 pymysql 连接,使用 pymysql 将我的 pandas 数据帧保存到 mysql 并转换 pandas 数据帧使用 .to_sql 方法进入 sql。
但是,如果我 运行 此代码 2 次,table 的名称会重叠并且不会 运行 第二次。 因此,每次 运行 这段代码时,我都需要更改 table 的名称(data_day001、data_day002、data_day003...)。
# Credentials to database connection
hostname="hostname"
dbname="sql_database"
uname="admin"
pwd="password"
# Create SQLAlchemy engine to connect to MySQL Database
engine = create_engine("mysql+pymysql://{user}:{pw}@{host}/{db}"
.format(host=hostname, db=dbname, user=uname, pw=pwd))
# Convert dataframe to sql table
channel_data.to_sql('data_day001', engine, index=False)
请告诉我如何解决这个问题。 非常感谢您。
使用inspect
函数:
from sqlalchemy import create_engine, inspect
def get_table_name(engine):
names = inspect(engine).get_table_names()
return f"data_day{len(names):03}"
engine = create_engine(...)
channel_data.to_sql(get_table_name(engine), engine, index=False)
几天后:
>>> inspect(engine).get_table_names()
['data_day000', 'data_day001', 'data_day002', 'data_day003', 'data_day004']