【问题标题】:SQLalchemy append dataframe to existing SQL Server tableSQLalchemy 将数据框附加到现有的 SQL Server 表
【发布时间】:2020-06-23 06:47:09
【问题描述】:

我正在尝试将数据框中的两列附加到现有的 SQL Server 表中。代码运行,但是当我查询 SQL 表时,不存在其他行。我错过了什么?

import sqlalchemy
engine = sqlalchemy.create_engine("mssql+pyodbc://user:pw@host:port/dbname?driver=ODBC+Driver+13+for+SQL+Server")

df.to_sql(name='database.tablename', con=engine, if_exists='append', index=False)

【问题讨论】:

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


    【解决方案1】:

    您不能在name= 参数中使用点表示法。只需使用name=tablename。其他部分都很好。

    如果您需要分配非默认 (dbo) 架构,df.to_sql() 有一个 schema= 参数。前缀database. 是多余的,因为您已经在引擎中分配了dbname

    使用 SQL Server 2017(debian 10 上的最新 docker 映像)和 anaconda python 3.7 进行测试。

    测试代码

    SQL Server 部分(创建一个空表)

    use testdb;
    go
    
    if OBJECT_ID('testdb..test') is not null
        drop table test;
    create table test (
        [Brand] varchar(max),
        [Price] money
    );
    

    Python部分

    from pandas import DataFrame
    import sqlalchemy
    
    # check your driver string
    # import pyodbc
    # pyodbc.drivers()  # ['ODBC Driver 17 for SQL Server']
    
    # connect
    eng = sqlalchemy.create_engine("mssql+pyodbc://myid:mypw@localhost:1433/testdb?driver=ODBC+Driver+17+for+SQL+Server")
    
    df = DataFrame(
        data={'Brand': ['A','B','C'],
              'Price': [10.00, 20.00, 30.00]}, 
        columns=['Brand', 'Price']
    )
    df.to_sql(name="test", schema="dbo", con=eng, if_exists="append", index=False)
    

    结果

    select * from [test]
    
    | Brand | Price   |
    |-------|---------|
    | A     | 10.0000 |
    | B     | 20.0000 |
    | C     | 30.0000 |
    

    【讨论】:

      猜你喜欢
      • 2018-07-13
      • 1970-01-01
      • 1970-01-01
      • 2019-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多