Pandas ve Pypyodbc

Merhaba dostlar,

bazı kütüphaneleri öğrenmek icin kendimce kücük scriptler yapmaya calısıyorum.

SQL de var olan bir tabloya Excel dosyasındaki verileri varsa update etmek yoksa eklemek istiyorum.

Verileri okuma kısmında sorun yaşamıyorum excel ve sql den verileri çekebiliyorum, sorun yaşadığım kısım excel dosyasında a satırındaki veri sql de var ise bunu update etsin yoksa tüm satırı insert etsin istiyorum, mantıgını kuramadıgım kısım burası, okudugum verileri python üzerinde bir kontrol mekanizması kurup sql e update ya da insert edememek, bu konu hakkında yardımcı olabilecekler var ise cok sevinirim. Bu kontrol mekanizması olmadıgından dolayı excel dosyasını her okudugumda mukerrer kayıt olusturuyorum veritabanına bunun olmasını istemiyorum.

import pandas as pd
import pypyodbc as db


path = "sql.xlsx"

excel_file = path
df = pd.read_excel(path)
for i in df.values:
    print(i)


vt = db.connect(
    'Driver={SQL Server};'
    'Server=suncuadi;'
    'Database=vtadi;'
    'Trusted_Connection=True;'
)

imlec = vt.cursor()

imlec.execute('select * from urunler')

kt = imlec.fetchall()

for y in kt:
    print(y)

ekle = 'insert urunler(barkod,urunad,urunmiktar,uretici,Kategori,Fiyat) values(?,?,?,?,?,?);'
veri = (i[0],i[1],i[2], i[3],i[4],i[5])
sonuc = imlec.execute(ekle,veri)
vt.commit()

Pandas ile okuduğun veriyi satır satır bir CTE’ye atıp, onunla da hedef tabloyu SQL’de bulunan MERGE ile INSERT/UPDATE etmeyi deneyebilirsin.

1 Beğeni

SQL yapisi ve Excel dosyasinin neye benzedigini bilmedigimiz icin duruma ozel bir sey soyleme imkanimiz yok ama,

SELECT id FROM urunler WHERE barkod = ?

varsa

UPDATE urunler SET barkod = ?, urunad = ?, ..., Fiyat = ? WHERE id = ?

yoksa

INSERT INTO urunler (barkod, urunad, ..., Fiyat) VALUES (?, ?, ..., ?)

1 Beğeni

Öncelikle destekleriniz için teşekkür ederim, örnekleriniz bana yol gösterdi, sorunu şu şekilde çözdüm.
Barkod kontrol ediyor varsa fiyatını update ediyor yoksa yeni ürün ekliyor, mükerrer ürün eklenmemiş oluyor.
SQL MERGE de ilgimi cekti bos vakitte daha detaylı araştıracağım

    ekle = ('IF EXISTS(select barkod from urunler where barkod=?) BEGIN UPDATE urunler SET Fiyat=? WHERE barkod=? END ELSE BEGIN insert urunler(barkod,urunad,urunmiktar,uretici,Kategori,Fiyat) values(?,?,?,?,?,?); END')
    veri = (i[0],i[5],i[0] ,i[0], i[1], i[2], i[3], i[4], i[5])
    sonuc = imlec.execute(ekle,veri)
    vt.commit()