解决pd.DataFrame.to_sql()自动添加服务器及用户名前缀至表名的问题
解决SQL Server表名带服务器\用户名前缀的问题
方法1:调用to_sql时显式指定架构
在df.to_sql()中添加schema参数,指定SQL Server的默认架构(通常为dbo):
df.to_sql(<Table_Name>, <Connection>, schema='dbo')
这样写入的表会直接归属到dbo架构下,SSMS中显示的表路径为[<Data_Base_Name>].[dbo].[<Table_Name>],查询时生成的语句就是你需要的格式。
方法2:全局设置默认架构(无需每次指定)
如果希望所有写入操作都默认使用目标架构,可以通过两种方式配置:
- 连接字符串指定:
在创建SQLAlchemy引擎的连接字符串中添加DefaultSchema=dbo:
from sqlalchemy import create_engine conn_str = "mssql+pyodbc://<数据库服务器>/<数据库名>?driver=ODBC+Driver+17+for+SQL+Server&Trusted_Connection=yes&DefaultSchema=dbo" engine = create_engine(conn_str)
- 引擎执行选项设置:
对已创建的引擎设置默认架构映射:
engine = engine.execution_options(schema_translate_map={None: 'dbo'})
之后调用df.to_sql()时,无需额外指定schema参数,会自动使用dbo架构。
注意点
- 确保你的数据库账号拥有目标架构(如
dbo)的读写权限,否则会触发权限报错。 - 如果数据库使用自定义默认架构,将上述示例中的
dbo替换为对应架构名称即可。
内容的提问来源于stack exchange,提问作者Galen
相关产品推荐
相关产品推荐

