开发者社区> 问答> 正文

SQLalchemy将数据框追加到现有SQL Server表

我正在尝试将数据框中的两列附加到现有的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)

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 17:52:16 608 0
1 条回答
写回答
取消 提交回答
  • 您不能在name =参数中使用点符号。只需使用name = tablename。其他部分都很好。

    如果您需要分配一个非默认(dbo)模式,则为df.to_sql()提供一个schema =参数。前缀`数据库。因为您已经在引擎中分配了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 |
    

    回答来源:stackoverflow

    2020-03-24 17:52:25
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载