- 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.txtSoruları çözebilmek için önce local PostgreSQL veritabanınızda tabloları oluşturmanız gerekiyor:
- 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/questions.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 (CI/CD ortamında bu bilgilerle çalışıyor).
Kodlamaya başlamadan önce şu iki dosyada kendi bilgilerinizi güncellemeniz gerekiyor:
tests/test_question.py— Dosyanın altındakirun_tests()fonksiyonundauser_iddeğerini kendi kullanıcı ID'nizle değiştirin.data/questions.py—connect_db()fonksiyonundaki veritabanı şifresini kendi local PostgreSQL şifrenizle değiştirin. Pushlarken varsayılan haliyle bırakın.
- Sadece
data/questions.pydosyasında çalışın. - Her
question_X_query()fonksiyonu içindeki boşcursor.execute('')satırına SQL sorgunuzu yazın. - Diğer dosyaları değiştirmeyin.
python watch.pyBu komut dosya değişikliklerini izler ve her kaydettiğinizde testleri otomatik çalıştırır.
Tek seferlik çalıştırmak için:
pytest tests/test_question.py -s -v| Sütun | Tip |
|---|---|
| customer_id | SERIAL (PK) |
| customer_name | VARCHAR(100) |
| VARCHAR(100) | |
| country | VARCHAR(50) |
| signup_date | DATE |
| Sütun | Tip |
|---|---|
| product_id | SERIAL (PK) |
| product_name | VARCHAR(100) |
| price | NUMERIC(8,2) |
| stock_quantity | INTEGER |
| Sütun | Tip |
|---|---|
| order_id | SERIAL (PK) |
| customer_id | INTEGER (FK -> customers) |
| order_date | DATE |
| total_amount | NUMERIC(10,2) |
-
customers tablosundan tüm müşterilerin adlarını ve ülkelerini getir.
-
orders tablosundaki en yüksek tutarlı 5 siparişi, tüm sütunlarıyla birlikte listele. (
total_amount'a göre azalan sırada) -
products tablosundan fiyatı en düşük 3 ürünü, sadece adları ve fiyatları ile getir.
-
customers tablosundaki tüm müşterileri
signup_date'e göre eskiden yeniye sırala. (Tüm sütunlar, LIMIT 10) -
products tablosunda en fazla stoğa sahip ürünü, sadece adı ve stock_quantity ile getir. (1 kayıt)
-
orders tablosundaki son siparişi (tarihi en güncel olan) tüm sütunlarıyla listele. (1 kayıt)
-
products tablosundan sadece
product_namesütununu alfabetik sırada getir. -
customers tablosundan
customer_id'ye göre sıralanmış ilk 5 müşteriyi, sadececustomer_idveemailsütunlarıyla getir. -
orders tablosundaki tutarı en düşük 3 siparişi, sadece
order_idvetotal_amountile getir. (total_amount'a göre artan sırada) -
customers tablosundan sadece Türkiye'deki (
country = 'Turkey') müşterilericustomer_name'e göre alfabetik sırala. (Tüm sütunlar)
Localinizdeki PostgreSQL'de başka tablolarla karışmasın istiyorsanız, yeni bir schema oluşturabilirsiniz:
CREATE SCHEMA data1;Ardından scripts/init_db.py içindeki tablo isimlerinin başına schema adını ekleyin:
CREATE TABLE data1.customers ( ... );
CREATE TABLE data1.products ( ... );
CREATE TABLE data1.orders ( ... );Foreign key (REFERENCES) tanımlarında da schema adını eklemeyi unutmayın:
CREATE TABLE data1.orders (
...
customer_id INTEGER REFERENCES data1.customers(customer_id),
...
);Sorgularınızda da aynı şekilde schema adını kullanmayı unutmayın:
SELECT * FROM data1.customers;Önemli: Bu sadece localinizde çalışırken kolaylık için. Kodunuzu pushlarken schema öneki olmadan bırakın, CI/CD ortamında
publicschema kullanılıyor.