Web2py - Veritabanı Soyutlama Katmanı
Database Abstraction Layer (DAL)web2py'nin en büyük gücü olarak kabul edilir. DAL, temel SQL sözdizimine basit bir Uygulama Programlama Arayüzü (API) sunar.
Bu bölümde, etiketlere göre verimli bir şekilde arama yapmak için sorgular oluşturmak ve hiyerarşik bir kategori ağacı oluşturmak gibi DAL'ın önemsiz olmayan uygulamalarını öğreneceğiz.
DAL'ın bazı önemli özellikleri şunlardır:
web2py, Python nesnelerini veritabanı nesnelerine eşleyen bir API olan Veritabanı Soyutlama Katmanı (DAL) içerir. Veritabanı nesneleri sorgular, tablolar ve kayıtlar olabilir.
DAL, veritabanı arka ucu için belirtilen diyalekti kullanarak gerçek zamanlı olarak SQL'i dinamik olarak üretir, böylece bir geliştiricinin eksiksiz SQL sorgusu yazması zorunlu değildir.
DAL kullanmanın en büyük avantajı, uygulamaların farklı veri tabanları ile taşınabilir olmasıdır.
DAL ile Başlarken
Web2py'deki çoğu uygulama bir veritabanı bağlantısı gerektirir. Bu nedenle, veritabanı modelini oluşturmak, bir uygulamanın tasarımında ilk adımdır.
Adlı yeni oluşturulan uygulamayı düşünün “helloWorld”. Veritabanı, uygulamanın Modelleri altında gerçekleştirilir. İlgili uygulama için tüm modeller -models/db_custom.py.
DAL uygulamak için aşağıdaki adımlar kullanılır -
Adım 1 - DAL Oluşturucu
Bir veritabanı bağlantısı kurun. Bu, aynı zamanda DAL kurucusu olarak da adlandırılan DAL nesnesi kullanılarak oluşturulur.
db = DAL ('sqlite://storage.sqlite')
DAL'ın dikkate değer özelliği, aynı veri tabanı ile veya farklı veri tabanları ile, farklı veri tabanı türleri ile bile birden çok bağlantıya izin vermesidir. Bu satırın zaten dosyada olduğu görülüyor.models/db.py. Bu nedenle, silmediğiniz veya farklı bir veritabanına bağlanmanız gerekmediği sürece buna ihtiyacınız olmayabilir. Varsayılan olarak web2py, dosyada depolanan bir SQLite veritabanına bağlanırstorage.sqlite.
Bu dosya, uygulamanın veritabanları klasöründe bulunur. Dosya yoksa, uygulama ilk çalıştırıldığında web2py tarafından oluşturulur.
SQLite hızlıdır ve tüm verileri tek bir dosyada depolar. Bu, verilerinizin bir uygulamadan diğerine kolayca aktarılabileceği anlamına gelir. Aslında, SQLite veritabanı / veritabanları uygulamalarla birlikte web2py tarafından paketlenmiştir. Çeviriler, birleştirmeler ve toplamalar dahil olmak üzere tam SQL desteği sağlar.
SQLite'ın iki dezavantajı vardır.
Birincisi, sütun türlerini zorlamaması ve sütun ekleme ve çıkarma dışında ALTER TABLE olmamasıdır.
Diğer bir dezavantaj, tüm veritabanının yazma erişimi gerektiren herhangi bir işlem tarafından kilitlenmesidir.
Adım 2 - Tablo Oluşturucu
Veritabanı ile bağlantı kurulduktan sonra, define_table yeni tabloları tanımlama yöntemi.
Örneğin -
db.define_table('invoice',Field('name'))
Yukarıdaki yöntem aynı zamanda Tablo yapıcısı arasında da kullanılır. Tablo yapıcısının sözdizimi aynıdır. İlk argüman tablo adıdır ve ardından bir liste gelirField(s). Alan yapıcısı aşağıdaki bağımsız değişkenleri alır -
Sr.No | Argümanlar ve Kullanım |
---|---|
1 | The field name Tablodaki alanın adı. |
2 | The field type dize (varsayılan), metin, boole, tamsayı vb. gibi veri türlerinden herhangi birine sahip değerleri alır. |
3 | Length Maksimum uzunluğu tanımlar. |
4 | default = None Bu, yeni bir kayıt eklendiğinde varsayılan değerdir. |
5 | update = None Bu, varsayılanla aynı şekilde çalışır, ancak değer eklemede değil, yalnızca güncellemede kullanılır. |
6 | Notnull Bu, alan değerinin NULL olup olmadığını belirtir. |
7 | readable = True Bu, alanın formlarda okunabilir olup olmadığını belirtir. |
8 | writable = True Bu, alanın formlara yazılabilir olup olmadığını belirtir. |
9 | label = "Field Name" Bu, formlarda bu alan için kullanılacak etikettir. |
define_table yöntem ayrıca üç adlandırılmış argüman alır -
Sözdizimi
db.define_table('....',migrate=True, fake_migrate=False, format = '%(id)s')
migrate = True - Bu, web2py'ye, yoksa tablo oluşturmasını veya model tanımıyla eşleşmiyorsa değiştirmesini söyler.
fake_migrate = False - Model veritabanı tablo içeriğiyle eşleşiyorsa, fake_migrate = True olarak ayarlayın, bu web2py'nin bir veriyi yeniden oluşturmasına yardımcı olur.
format = '%(id)s' - Bu, verilen tablodaki kayıtların nasıl temsil edilmesi gerektiğini belirleyen bir biçim dizesidir.
Ham SQL Oluşturma
DAL kullanarak, veri tabanına bir bağlantı kurabilir ve tablo yapıcısı ve alan yapıcısını kullanarak yeni tablolar ve alanlarını oluşturabiliriz.
Bazen, gerekli çıktıya uymak için SQL ifadeleri oluşturmak gerekir. web2py, aşağıdaki gibi verilen ham SQL oluşturmaya yardımcı olan çeşitli işlevleri içerir -
_insert
Verilen tablo için insert deyimlerinin alınmasına yardımcı olur. Örneğin,
print db.person._insert(name ='ABC')
"Kişi" adlı tablo için insert deyimini alır.
SQL deyimi çıktısı -
INSERT INTO person(name) VALUES ('ABC');
_Miktar
Kayıt sayısını veren SQL ifadesinin alınmasına yardımcı olur. Örneğin, 'kişi' adlı bir tablo düşünün ve 'ABC' adlı kişilerin sayısını bulmamız gerekiyor.
print db(db.person.name ==' ABC ')._count()
SQL deyimi çıktısı -
SELECT count(*) FROM person WHERE person.name = ' ABC ';
_select
Seçili SQL ifadelerinin alınmasına yardımcı olur. Örneğin, 'kişi' adlı bir tablo düşünün ve 'ABC' adlı kişilerin listesini bulmamız gerekiyor.
print db(db.person.name == ' ABC ')._select()
SQL deyimi çıktısı -
SELECT person.name FROM person WHERE person.name = ' ABC ';
_delete
Getirmeye yardımcı olur delete SQLifadeler. Örneğin, 'kişi' adlı tabloyu düşünün ve 'ABC' adlı ifadeleri silmemiz gerekiyor.
print db(db.person.name == ' ABC ')._delete()
SQL deyimi çıktısı -
DELETE FROM person WHERE person.name = ' ABC ';4
_Güncelleme
Güncellenmiş SQL ifadelerinin alınmasına yardımcı olur. Örneğin, 'kişi' adlı tabloyu düşünün ve bir sütun adını başka bir değerle güncellememiz gerekiyor.
print db(db.person.name == ' ABC ')._update()
SQL deyimi çıktısı -
UPDATE person SET WHERE person.name = ’Alex’;
DAL ile ilgili sorunlar (Gotchas)
SQLite
SQLite, sütunları düşürme veya değiştirme desteğinden yoksundur. Tablodan bir alanı silmek, yapılan değişikliklerin web2py'nin farkında olmayacağı için, onu veritabanında aktif tutar.
Bu durumda, fake_migrate = True Bu, meta verilerin yeniden tanımlanmasına yardımcı olacak, böylece değiştirme veya silme gibi herhangi bir değişiklik web2py'nin bilgisi altında tutulacaktır.
SQLite, Boole türlerini desteklemez. Bunun için, web2py dahili olarak Boole'ları 1 karakter dizesiyle eşler, 'T' ve 'F' temsil edertrue ve False sırasıyla.
MySQL
MySQL, ALTER TABLE özelliğini desteklemez. Bu nedenle, veri tabanının taşınması birden fazla işlemi içerir. Parametre ayarlanarak bu durum önlenebilirfake_migrate = True tüm meta verileri kalıcı hale getirecek olan veritabanını tanımlarken.
Oracle
Oracle, kayıtlara sayfalandırma özelliğini desteklemez. Ayrıca OFFSET veya limit anahtar sözcükleri için destekten yoksundur. Bunun için web2py, karmaşık üç yollu iç içe geçmiş DAL seçimi yardımıyla sayfalandırmayı başarır. Oracle veritabanı kullanılmışsa DAL'ın sayfalandırmayı kendi başına ele alması gerekir.