You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中pandas.to_sql()如何将传入DataFrame变量名设为SQL表名

错误原因

你之前的table_name = 'df'.format(df)写法不生效,是因为字符串'df'没有设置占位符,且df本身是DataFrame实例对象,不会存储它被赋值的变量名,无法直接从对象本身读取变量名。

实现方案

借助Python标准库inspect模块读取调用栈信息,提取调用函数时传入的变量名作为表名,修改后的完整代码如下:

import urllib
import sqlalchemy
import inspect

def write_to_sql(df):
    # 提取调用时传入的变量名
    call_stack = inspect.stack()
    call_code = call_stack[1].code_context[0].strip()
    table_name = call_code.split('(')[1].split(')')[0].strip()

    # 请补全下方DRIVER、SERVER、DATABASE的实际配置值
    params = urllib.parse.quote_plus(r'DRIVER={ODBC Driver 17 for SQL Server};SERVER={你的数据库实例地址};DATABASE={你的数据库名称};Trusted_connection=yes;')
    conn_str = 'mssql+pyodbc:///?odbc_connect={}'.format(params)
    engine = sqlalchemy.create_engine(conn_str)

    df.to_sql(name=table_name, con=engine, schema='yep', if_exists='replace', index=True, index_label=None, chunksize=10, dtype=None)

# 调用时传入变量my_test_table,自动生成的表名即为my_test_table
write_to_sql(my_test_table)

可选优化

如果需要兼顾自动提取和手动指定表名的场景,可以新增可选参数做兼容,稳定性更高:

def write_to_sql(df, table_name=None):
    if table_name is None:
        # 自动提取变量名逻辑
        call_stack = inspect.stack()
        call_code = call_stack[1].code_context[0].strip()
        table_name = call_code.split('(')[1].split(')')[0].strip()
    
    # 后续连接、写入逻辑不变
    params = urllib.parse.quote_plus(r'DRIVER={ODBC Driver 17 for SQL Server};SERVER={你的数据库实例地址};DATABASE={你的数据库名称};Trusted_connection=yes;')
    conn_str = 'mssql+pyodbc:///?odbc_connect={}'.format(params)
    engine = sqlalchemy.create_engine(conn_str)
    df.to_sql(name=table_name, con=engine, schema='yep', if_exists='replace', index=True, index_label=None, chunksize=10, dtype=None)

# 两种调用方式都支持
write_to_sql(my_test_table) # 自动使用变量名作为表名
write_to_sql(my_test_table, table_name="custom_table") # 手动指定表名

注意事项

如果调用函数时传入的不是直接的变量(比如write_to_sql(df.copy())、write_to_sql(pd.DataFrame({'a':[1,2]}))这类表达式),自动提取的表名会不符合预期,这类场景建议手动指定table_name参数。

内容的提问来源于stack exchange,提问作者papelr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 14:30:04