如何移除pandas to_sql生成表名的[UserName]前缀?
解决pandas to_sql生成表名带用户前缀的问题
嘿,这个问题我之前折腾过好几次!其实这是因为你的数据库连接默认绑定了当前用户的专属schema(就是那个[UserName]对应的),而pandas的to_sql在没指定schema的时候,会自动用连接的默认schema来生成完整表名。下面给你几个实用的解决办法:
直接在
to_sql里指定公共schema
大部分数据库都有公共的默认schema,比如SQL Server是dbo,PostgreSQL是public,MySQL则直接用数据库名。你只需要在调用to_sql时加上schema参数就行:df.to_sql(name="testTable", con=constring, schema="dbo")这样生成的表就是
[dbo].[testTable],后续查询时直接写testTable就能访问,不会再带用户前缀。修改连接字符串,全局设置默认schema
要是不想每次调用都加参数,你可以在连接字符串里直接指定默认schema。举几个常见数据库的例子:- SQL Server(ODBC驱动):
constring = "DRIVER={ODBC Driver 17 for SQL Server};SERVER=你的服务器;DATABASE=你的库;UID=账号;PWD=密码;Schema=dbo" - PostgreSQL:
constring = "postgresql://账号:密码@服务器:端口/库名?options=-c search_path=public"
这样连接数据库后,默认schema就是你指定的,
to_sql生成的表自然就不会带用户前缀了。- SQL Server(ODBC驱动):
在数据库端修改用户的默认schema
如果你有权限,也可以直接在数据库里调整用户的默认schema设置,一劳永逸。比如SQL Server里执行这条SQL:ALTER USER YourUserName WITH DEFAULT_SCHEMA = dbo;之后这个用户连接数据库时,默认就会使用
dboschema,to_sql生成的表就直接在公共schema下了。
注意:不同数据库的默认schema名称可能有差异,比如Oracle默认是用户名本身,MySQL则是数据库名,你要根据自己用的数据库调整对应的schema名称哦。
内容的提问来源于stack exchange,提问作者user33484
相关产品推荐
相关产品推荐

