【问题标题】:how to insert dataframe into SQl server database in pandas如何将数据框插入到 Pandas 中的 SQl 服务器数据库中
【发布时间】:2021-08-16 06:09:30
【问题描述】:

我想将数据框中的整行插入 pandas 中的 sql server。

我可以使用下面的命令插入,但是,我有 46+ 列,不想输入所有 46 列。

    server = 'server' 
    database = 'db'  
    cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server+';DATABASE='+database)
    cursor = cnxn.cursor()
        for index, row in df.iterrows():
            cursor.execute("INSERT INTO HumanResources.DepartmentTest (DepartmentID,Name,GroupName) values(?,?,?)", row.DepartmentID, row.Name, row.GroupName)
        cnxn.commit()
        cursor.close() 

有没有一种方法可以插入整行而不给出列名? 像这样?

insert into table1
select * from df

我尝试了以下命令,但失败了,

for index, row in df.iterrows():
    cursor.execute("INSERT INTO dbo.Staging select row"
                   )
Error:('42S22', "[42S22] [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'row'. (207) (SQLExecDirectW); [42S22] [Microsoft][ODBC SQL Server Driver][SQL Server]Column name or number of supplied values does not match table definition. (213)")

我无法使用 to_sql,因为我无法在 UAT 或 prod 中导入 sqlalchemy。 谁能帮我解决这个问题?

【问题讨论】:

    标签: python sql pandas


    【解决方案1】:

    连同下面的语句提及列名

    插入 table1 (col1,col2,...conN) 从 df 中选择 col1,col2,..colN

    忽略标识列

    【讨论】:

    • 我不想提及列名,我有 46 多列。我想一次插入所有列而不指定单个列
    • 在这种情况下目标表不应该有标识列
    • 它没有任何键列。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 2015-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-22
    相关资源
    最近更新 更多