[英]MySQL if exists (select), update, else, insert with python using date comparison
[英]SQL Server how to UPDATE if exists else INSERT by Python
我在堆棧溢出中搜索了許多文章,但找不到滿足我要求的文章。 以下是我所指的。
我的要求使用 Python 創建 ETL 過程:從源中提取數據,轉換為 dataframe 然后上傳到 MS SQL 服務器。 如果找到具有相同 product_id 的重復行,則更新 SQL 數據庫,否則插入新行。
我的代碼
import pandas as pd
import pyodbc
# Import CSV
data = pd.read_csv(r'C:\Users\...\product.csv')
df = pd.DataFrame(data)
records = df.values.tolist()
# Connect to SQL Server
server = 'AAABBBCCC\SQLEXPRESS'
database = 'abcdefg'
username = 'User'
password = ''
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server+';DATABASE='+database+';Trusted_Connection=True;')
cursor = cnxn.cursor()
#Insert Data
sql_insert = '''
UPDATE [atetestdb].[dbo].[products]
SET product_name = ?
,price = ?
WHERE product_id = ?
IF @@ROWCOUNT = 0
INSERT INTO [atetestdb].[dbo].[products]
(product_id, product_name, price)
VALUES (?, ?, ?)
'''
cursor.executemany(sql_insert, records)
cnxn.commit()
我的結果我得到的錯誤信息:
SQL 包含 6 個參數標記,但提供了 3 個參數
SQL 評論似乎有問題。 有人可以幫忙嗎? 任何其他滿足我要求的解決方案也值得贊賞。
我在 SQL 數據庫中的數據集
product_id | 產品名稱 | 價格 |
---|---|---|
1 | 桌子 | 1900 |
2 | 打印機 | 200 |
3 | 葯片 | 350 |
4 | 鍵盤 | 80 |
5 | 監視器 | 1200 |
6 | 桌子 | 900 |
csv 文件中的我的數據集
product_id | 產品名稱 | 價格 |
---|---|---|
5 | 監視器 | 600 |
將批次更改為每個參數都有局部變量,例如:
sql_insert = '''
declare @product_name varchar(100) = ?
declare @price decimal(10,2) = ?
declare @product_id int = ?
UPDATE [atetestdb].[dbo].[products]
SET product_name = @product_name, price = @price
WHERE product_id = @product_id
IF @@ROWCOUNT = 0
INSERT INTO [atetestdb].[dbo].[products]
(product_id, product_name, price)
VALUES (@product_id, @product_name, @price)
'''
您可以 go 進行簡單的 MERGE 語句。
MERGE [atetestdb].[dbo].[products] as t
USING (Values(?,?,?)) AS s(Product_name, price, product_id)
ON tgr.product_id = src.product_id
WHEN MATCHED THEN UPDATE SET
t.product_name = s.product_name
,t.price = s.price
WHEN NOT MATCHED BY TARGET
THEN INSERT (Product_name, price, product_id)
VALUES (s.Product_name, s.price, s.product_id)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.