【问题标题】:df to sql server replacedf 到 sql server 替换
【发布时间】:2021-02-19 06:24:27
【问题描述】:

我正在抓取网页,并希望将我的数据框保存到我的 sql 服务器中,该服务器每月更新,我应该在代码中添加什么来替换未添加的数据。我使用 pyodbc(我不能使用 sql achemy)提前谢谢你。

col_names = ["month", "price", "change"]
df = pd.read_csv("minyak_brent.csv",sep=',',quotechar='\'',encoding='utf8', names=col_names,skiprows = 1) # Replace Excel_file_name with your excel sheet name
for index,row in df.iterrows():
    cursor.execute('INSERT INTO dbo.minyak_brent([month],[price],[change]) values (?,?)', 
                    row['month'], 
                    row['price'], 
                    row['change'])
                    
    cnxn.commit()
cursor.close()
cnxn.close()

【问题讨论】:

    标签: python sql-server pandas syntax screen-scraping


    【解决方案1】:

    您应该在此处使用df.to_sql,这样可以避免显式迭代您的 Pandas 数据框:

    df.to_sql(con=engine, name='dbo.minyak_brent', if_exists='append', dtype={
        'month': STRING(255),
        'price': FLOAT,
        'change': FLOAT, index=False
    )
    

    这假定monthpricechange 列的类型分别为String(255)FLOATFLOAT

    如果您必须坚持当前的方法,请修复您的插入语句,使其在 VALUES 子句中具有正确数量的占位符:

    cursor.execute('''INSERT INTO dbo.minyak_brent([month], [price], [change])
                      VALUES (?, ?, ?)''',  (row['month'], row['price'], row['change']))
    

    请注意,我们将 tuple 作为第二个参数插入cursor#execute

    【讨论】:

    • 谢谢!但抱歉我不能使用 sql alchemy
    • 检查修改,它至少修复了当前代码的一些问题。
    • 是的,谢谢!但它仍然被添加..如何替换它?
    • 您需要先弄清楚您是要添加新数据还是修改已经存在的数据。两者甚至不使用相同的 SQL 命令;第一个使用INSERT,第二个使用UPDATE。你的问题从来没有明确表明你想做除了插入之外的任何事情,因此我在上面的回答。
    • 对不起,我的英语非常有限,所以我真的写不出来..如果同时使用 if-else,它会起作用吗?
    猜你喜欢
    • 2021-04-28
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    • 2016-07-11
    相关资源
    最近更新 更多