SQLite3 NOT NULL constraint failed sorunu

Merhabalar;
Ufak bir program yazmaya çalışıyorum ancak veri tabanında FOREIGN KEY ile PRIMARY KEY bağlantısında sorun yaşıyorum.
Kodları aşağıya ekliyorum

Özetle durum şu
3 tane tablom var

  ##urunler##          ##fiyatlar##         ##marketler## 
PK *urun_no          PK *fiyat_no         PK *market_no 
    barkod_no            fiyat                market_adi 
    urun_adi         FK  market_no            sube_adi 
FK  fiyat_no     

kaydı oluşturmak için ; barkod_no, urun_adi, market_adi, sube_adi, fiyat bilgileri giriliyor.

Bu sırada oluşan marketler tablosundaki market_no bilgisinin fiyatlar tablosundaki market_no sütununa ,
fiyatlar tablosundaki fiyat_no bilgisinin urunler tablosundaki fiyat_no sütununa otomatik olarak kaydolmasını istiyorum.

Bunun için aşağıdaki gibi bir tablo oluşumu yazdım.
*Kayıt kodları da bir aşağıda.

Bunu çalıştırıp kaydet dediğimde “sqlite3.IntegrityError: NOT NULL constraint failed: fiyatlar.market_no” hatasını alıyorum.

Nerede yanlış yaptım yardımcı olabilir misiniz?

veriler.execute("CREATE TABLE IF NOT EXISTS " 
                "marketler(market_no INTEGER PRIMARY KEY AUTOINCREMENT, " 
                "market_adi VARCHAR, " 
                "sube_adi VARCHAR)") 

veriler.execute("CREATE TABLE IF NOT EXISTS " 
                "fiyatlar(fiyat_no INTEGER PRIMARY KEY AUTOINCREMENT, " 
                "fiyat FLOA," 
                "market_no INTEGER NOT NULL , 
                 FOREIGN KEY (market_no) REFERENCES marketler(market_no))") 

veriler.execute("CREATE TABLE IF NOT EXISTS " 
                "urunler(urun_no INTEGER PRIMARY KEY AUTOINCREMENT, " 
                "barkod_no VARCHAR, " 
                "urun_adi VARCHAR," 
                "fiyat_no INTEGER NOT NULL , 
                 FOREIGN KEY (fiyat_no) REFERENCES fiyatlar(fiyat_no))")

*KAYIT OLUŞTURMAK İÇİN YAZDIĞIM KODLAR

    veriler.execute("INSERT INTO marketler(market_adi, sube_adi) 
                     VALUES ('{}', '{}')".format(market_adi.get(), sube_adi.get())) 

    veriler.execute("INSERT INTO fiyatlar(fiyat) 
                     VALUES('{}')".format(fiyat.get())) 
    
    veriler.execute("INSERT INTO urunler(barkod_no, urun_adi) 
                     VALUES ('{}' , '{}')".format(barkod_no.get(), urun_adi.get())) 
    baglan.commit()

CREATE TABLE ( , ,
CONSTRAINT FOREIGN KEY () REFERENCES ()

Şeklinde anahtarları ilişkilendirmeyi deneyin

Bu linkte de örnekler mevcut
http://www.sqlkodlari.com/32-sql-foreign-key-kullanimi.asp

http://www.ismailgursoy.com.tr/bir-tablodan-baska-bir-tabloya-veri-aktarimi/

Oncelikle, sorunun Python ile bir alakasi yok.

fiyatlara market_no'su NULL olan satir eklemeye calisiyorsun, kolonda da NOT NULL kosulu var. Ayni hata urunlere fiyat_no=NULL eklemeye calisirken de karsina cikacak.

NULL nereden geliyor dersen, kolonu INSERT'te belirtmemissin ve default degeri NULL.

Nasıl yapacağım ?
insertte belirteyim de o an var olmayan otomatik oluşacak olan bir market_no ve fiyat_no bilgisini diğer tabloya yazdırmaya çalışıyorum bunu nasıl yapabilirim ?

kodları pythonda yapmaya çalıştığımı belirtmek için yazdım başlığa Python diye.

AUTOINCREMENT bir alana neden NOT NULL kısıtı koyuyorsunuz ki? Zaten o otomatik oluşan bir alan. Böyle bir kontrol yapmanıza gerek yok.

yapmak istediğim olmadıkça farklı şeyler ekledim gene olmadı
yukarıda anlattığım şeyi yapacak kodu yazabilecek var mı?

SQL standardinin INSERT ... RETURNING kolon olmasi lazim. Goz ucuyla baktigim kadariyla MySQL’in igrenc hack’i olan last_insert_rowid() de mevcut.