- 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/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 (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/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
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 |
|---|---|
| student_id | SERIAL (PK) |
| first_name | VARCHAR(50) |
| last_name | VARCHAR(50) |
| VARCHAR(100) | |
| age | INT |
| Sütun | Tip |
|---|---|
| course_id | SERIAL (PK) |
| course_name | VARCHAR(100) |
| category | VARCHAR(50) |
| Sütun | Tip |
|---|---|
| instructor_id | SERIAL (PK) |
| name | VARCHAR(100) |
| expertise | VARCHAR(100) |
| Sütun | Tip |
|---|---|
| enrollment_id | SERIAL (PK) |
| student_id | INT (FK -> students) |
| course_id | INT (FK -> courses) |
| enrollment_date | DATE |
| Sütun | Tip |
|---|---|
| id | SERIAL (PK) |
| course_id | INT (FK -> courses) |
| instructor_id | INT (FK -> instructors) |
-
students tablosundan yaşı 22'den büyük öğrencileri listele. (Tüm sütunlar)
-
courses tablosundan kategorisi 'Veritabanı' olan kursları getir. (Tüm sütunlar)
-
students tablosundan ismi 'A' harfi ile başlayan öğrencileri bul. (Tüm sütunlar)
-
courses tablosundan kurs ismi içinde 'SQL' geçenleri listele. (Tüm sütunlar)
-
students tablosundan yaşı 22 ile 24 arasında (dahil) olan öğrencileri getir. (Tüm sütunlar)
-
Kursa kayıtlı olan öğrencilerin isimlerini listele. (
first_name,last_name— tekrar etmeyen,student_id'ye göre sıralı) -
Veritabanı kategorisindeki kurslara kayıtlı öğrenci sayısını bul. (
course_name,student_count—course_id'ye göre sıralı) -
Her kursun adını ve bu kursu veren öğretmenin adını getir. (
course_name,instructor_name—course_id'ye göre sıralı) -
Hiçbir kursa kayıtlı olmayan öğrencileri listele. (Tüm sütunlar)
-
Kurslara göre ortalama öğrenci yaşı nedir? (
course_name,avg_age—course_name'e göre alfabetik sıralı)
-
Öğrenci başına toplam kaç kursa kayıtlı olduklarını listele. (
first_name,last_name,total_courses—student_id'ye göre sıralı) -
Birden fazla kurs veren öğretmenleri listele. (
instructor_name,total_courses) -
Kurslara göre kaç farklı öğrenci kayıtlı? (
course_name,unique_students—course_name'e göre alfabetik sıralı) -
Hem 'SQL Temelleri' hem de 'İleri SQL' kursuna kayıtlı öğrencileri bul. (
first_name,last_name) -
Kurs, öğretmen ve öğrenciyi birleştirerek kayıt tarihlerini listele. (
first_name,last_name,course_name,instructor_name,enrollment_date—enrollment_id'ye göre sıralı)
Localinizdeki PostgreSQL'de başka tablolarla karışmasın istiyorsanız, yeni bir schema oluşturabilirsiniz:
CREATE SCHEMA data2;Ardından scripts/init_db.py içindeki tablo isimlerinin başına schema adını ekleyin:
CREATE TABLE data2.students ( ... );
CREATE TABLE data2.courses ( ... );Foreign key (REFERENCES) tanımlarında da schema adını eklemeyi unutmayın:
CREATE TABLE data2.enrollments (
...
student_id INT REFERENCES data2.students(student_id),
...
);Sorgularınızda da aynı şekilde schema adını kullanmayı unutmayın:
SELECT * FROM data2.students;Ö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.