- Projeyi fork edin ve kendi hesabınıza clone edin.
- Terminal'de proje klasörüne girin.
python -m venv venv
source venv/bin/activate
pip install -r requirements.txtpython -m venv venv
venv\Scripts\activate
pip install -r requirements.txt- PostgreSQL'in bilgisayarınızda kurulu ve çalışır durumda olduğundan emin olun.
scripts/init_db.pydosyasındaki SQL komutlarını sırasıyla kendi local veritabanınızda çalıştırın.- Tabloların doğru oluştuğundan emin olmak için her tabloya birer
SELECT *sorgusu atın.
Not:
data/question.pyiçindekiconnect_db()fonksiyonunda veritabanı bağlantı bilgileri var. Localinizde test ederken kendi bilgilerinizle değiştirin. Pushlarken bu bilgileri varsayılan haliyle bırakın.
tests/test_question.py— Dosyanın altındakirun_tests()fonksiyonundauser_iddeğerini kendi kullanıcı ID'nizle değiştirin.data/question.py—connect_db()fonksiyonundaki veritabanı şifresini kendi local PostgreSQL şifrenizle değiştirin. Pushlarken varsayılan haliyle bırakın.
- Sadece
data/question.pydosyasında çalışın. - Her fonksiyon içindeki boş
cursor.execute('')satırına SQL sorgunuzu yazın. - Diğer dosyaları değiştirmeyin.
python watch.pyTek seferlik:
pytest tests/test_question.py -s -v| Sütun | Tip |
|---|---|
| customer_id | SERIAL (PK) |
| full_name | VARCHAR(100) |
| VARCHAR(100) — NULL olabilir | |
| signup_date | DATE |
| Sütun | Tip |
|---|---|
| order_id | SERIAL (PK) |
| customer_id | INT (FK -> customers) |
| order_date | DATE |
| total_amount | NUMERIC(10,2) |
| status | VARCHAR(20) |
| Sütun | Tip |
|---|---|
| product_id | SERIAL (PK) |
| product_name | VARCHAR(100) |
| price | NUMERIC(10,2) |
| category | VARCHAR(50) — NULL olabilir |
-
customers tablosundaki
NULLemailleri'unknown@example.com'ile değiştir. (UPDATEsorgusu — değer döndürmez) -
Email adresi içinde '@' işareti geçmeyen kayıtları bul. (Tüm sütunlar)
-
customers tablosundan müşterinin ismini ve isminin ilk 3 harfini
short_nameismiyle getir. (full_name,short_name) -
customers tablosundan müşterinin ismini ve emailinin @ işaretinin sağ tarafını (domain) getir. (
full_name,domain) -
Tüm müşterilerin isim ile emaili birleştirerek
full_infoismiyle döndür. Format:'isim - email'(full_info) -
orders tablosundan tüm tutarları INTEGER'a çevirip
order_idile birlikte döndür. (order_id,total_amount_int) -
Müşterilerin ismini ve emaillerindeki @ işaretinin kaçıncı indekste olduğunu
at_positionismiyle döndür. (full_name,at_position) -
products tablosundan ürün ismini ve kategorisini
product_categoryismiyle döndür. Eğer kategori NULL ise'Unknown'ile değiştir. (product_name,product_category)
-
orders tablosundan
customer_id,total_amountve toplam harcamaya göre sıralamayı (RANK)rank_by_spendismiyle döndür. (customer_id,total_amount,rank_by_spend) -
Siparişlere göre çalışan toplamı (Running Total —
SUM OVER) hesapla. (order_id,customer_id,total_amount,running_total)
-
Electronics ve Appliances kategorisindeki ürünleri tek listede getir. (
product_name,category) -
Tüm siparişler ve siparişi olmayan müşterileri birleştir. (
customer_id,total_amount— siparişi olmayanlardatotal_amountNULL)
Localinizdeki PostgreSQL'de başka tablolarla karışmasın istiyorsanız:
CREATE SCHEMA data5;Tablo ve sorguların başına schema adını ekleyin. Foreign key tanımlarında da schema adını unutmayın. Pushlarken schema öneki olmadan bırakın.