【问题标题】:sqlalchemy to_sql if_exists = "replace" creates a table with different prefixsqlalchemy to_sql if_exists = "replace" 创建具有不同前缀的表
【发布时间】:2020-07-11 05:12:27
【问题描述】:

当我尝试执行以下代码时,它会删除数据库中的实际表,但不会重新创建相同的表。它不会生成 dbo.TableName 类型,而是创建 username/TableName

engine = sqlalchemy.create_engine(
    "mssql+pyodbc://server/dbname?driver=ODBC+Driver+13+for+SQL+Server")
df.to_sql("OTD_1_DELIVERY_TRACKING_F_IMPORT", con=engine, if_exists="replace", index=False)

有谁知道如何解决这个问题,以便重新创建 dbo.TableName 表?

【问题讨论】:

    标签: python sql-server python-3.x sqlalchemy ssms


    【解决方案1】:

    有谁知道如何解决这个问题,以便它重新创建 dbo.TableName 表

    发生这种情况是因为用户的默认架构不是dbo。在非常旧的 SQL Server 版本中,每个用户都有自己的架构,这是这种行为的痕迹。

    所以当那个用户运行时

    DROP TABLE OTD_1_DELIVERY_TRACKING_F_IMPORT
    

    它首先查看用户的默认架构,但没有找到任何内容,然后查看dbo 架构,然后删除该表。但是当用户运行时

    CREATE TABLE OTD_1_DELIVERY_TRACKING_F_IMPORT ...
    

    它是在用户的默认架构中创建的。

    简单的解决方法是将用户的 DEFAULT SCHEMA 更改为 dbo。 EG

    ALTER USER [SomeUser] WITH DEFAULT_SCHEMA = dbo;
    

    【讨论】:

    • 它成功了,我不得不将我的用户名放在括号 [] 中,因为它有一个反斜杠,但之后它运行得很好。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2019-04-21
    • 2015-11-28
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 2018-03-17
    • 2012-12-31
    • 2022-08-02
    相关资源
    最近更新 更多