Fonksiyonlardan Değişkenlerin Kontrolü

Bismillahirrahmanirrahim

Şu kodda yapmak istediklerim:


          if len(self.output) >= 1 and self.output[0][2] == price:
            db.database.execute(f"UPDATE products SET piece={self.output[0][3] + piece} WHERE id={self.output[0][0]}")
            db.database.commit()

Yukarıdaki self.output içerisinde bulunan [(2, 'Karga Burnu', '100', 4550), (3, 'Karga Burnu', '120', 850)] listesini teker teker burada sorgulamak istiyorum. for döngüsü kullanmadan yapmam mümkün mü? Kaç yolu vardır?

Fonksiyonun Amacı: Veritabanında aynı adda ürün ve fiyat varsa miktara ekleme yapacak, fiyat farklı ya da hiç yoksa veritabanına yeni ürün olarak kayıt edecek. (Önerilere açıktır.)


    def __init__(self):
        self.name = None

Yukarıdaki kısmı add fonksiyonundan self.name = name değiştirip, info fonksiyonundan (değişmiş hâline) ulaşmak istiyorum. Nasıl yapabilirim?

  • Bu konu hakkında detaylı ama sade bilgi içeren bir kaynak atarsanız memnun olurum. Zira herhangi bir class içerisinde geçen değişkene dışarıan nasıl ulaşabileceğimi ve özellikle yeni değere nasıl ulaşabileceğimi tam manasıyla anlamadım.

Tam hâli:

from database import data as db

class Unit:
    """
    Ürün hakkında herşey
    """
    def __init__(self):
        self.name = None

    def query(self, name):
        """
        Veritabanında veri arar
        """
        db.imlec.execute(f"SELECT * FROM products WHERE name= '{name}' ")
        self.output = db.imlec.fetchall()

    def add(self, name, price, piece):
        """
        Veritabanına ürün ekler
        """
        self.name = name
        self.query(name)
        if len(self.output) >= 1 and self.output[0][2] == price:
            db.database.execute(f"UPDATE products SET piece={self.output[0][3] + piece} WHERE id={self.output[0][0]}")
            db.database.commit()
        else:
            db.database.execute(f"INSERT INTO products VALUES (NULL, '{name}', '{price}', '{piece}')")
            db.database.commit()

    def remove(self, id):
        db.database.execute(f"DELETE FROM product WHERE id={id}")
        db.database.commit()

def info():
    p = Unit()
    print(p.name)

Unit().add('Karga Burnu', 120, 850)
1 Beğeni

Mümkün.

Kaç yol lazım?

Veri tabanlarının bir çok amacından biri de içinde bir kayıt var mı diye kolayca bulmaktır.

SQL EXISTS Operator (w3schools.com)

Sadece bilgi içeren kaynak isterseniz:
9. Classes — Python 3.10.4 documentation

Nesne Tabanlı Programlama (OOP) — Yazbel Python Belgeleri

Basit kaynak isterseniz:

python - Getting the class name of an instance? - Stack Overflow

Sadakallahülazim

İslami usüllerle kodlama yapıyoruz dur bakalım.

4 Beğeni