Created
October 25, 2024 11:03
-
-
Save baran/3f0353f4382a9270b0d71aa5a1bdbaa7 to your computer and use it in GitHub Desktop.
BLP205 - 25.10.2024
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| -- Yeni öğrenci ekleme | |
| INSERT INTO students (first_name, last_name, email) VALUES ('Ali', 'Yılmaz', 'ali.yilmaz@example.com'); | |
| -- Yeni kurs ekleme | |
| INSERT INTO courses (course_name, course_code) VALUES ('Veritabanı Sistemleri', 'BIL205'); | |
| -- Tüm öğrencileri listele | |
| SELECT * FROM students; | |
| -- Öğrenci ve kayıtlı olduğu kursları listele | |
| SELECT s.first_name, s.last_name, c.course_name | |
| FROM students s | |
| JOIN students_courses sc ON s.id = sc.student_id | |
| JOIN courses c ON c.id = sc.course_id; | |
| -- Öğrencinin email adresini güncelleme | |
| UPDATE students SET email = 'ali.yeni@example.com' WHERE id = 1; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| services: | |
| db: | |
| image: postgres:latest | |
| environment: | |
| POSTGRES_USER: postgres | |
| POSTGRES_PASSWORD: password | |
| POSTGRES_DB: blp205 | |
| ports: | |
| - "5432:5432" | |
| volumes: | |
| - ./db-data:/var/lib/postgresql/data | |
| python: | |
| build: . | |
| depends_on: | |
| - db | |
| volumes: | |
| - .:/usr/src/app | |
| environment: | |
| POSTGRES_DB: blp205 | |
| POSTGRES_USER: postgres | |
| POSTGRES_PASSWORD: password | |
| POSTGRES_HOST: db | |
| command: python3 seed_data.py |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| FROM python:3.9 | |
| # PostgreSQL istemcisini yükle | |
| RUN apt-get update && apt-get install -y postgresql-client | |
| # Diğer Dockerfile komutlarınız | |
| WORKDIR /usr/src/app | |
| COPY . . | |
| # Gerekli Python paketlerini yükleyin | |
| RUN pip install -r requirements.txt | |
| # Entry point scriptinizi kopyalayın | |
| COPY entrypoint.sh /usr/local/bin/ | |
| RUN chmod +x /usr/local/bin/entrypoint.sh | |
| ENTRYPOINT ["entrypoint.sh"] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| # entrypoint.sh | |
| # PostgreSQL'e bağlanana kadar bekle | |
| until pg_isready -h db -p 5432; do | |
| echo "Waiting for PostgreSQL to be ready..." | |
| sleep 2 | |
| done | |
| echo "PostgreSQL ready!" | |
| # Ardından, uygulamanızı başlatın | |
| exec python /usr/src/app/seed_data.py |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| psycopg2-binary | |
| Faker |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import psycopg2 | |
| from faker import Faker | |
| import random | |
| # Geçici vt bağlantı Bilgileri | |
| db_config = { | |
| 'dbname': 'postgres', | |
| 'user': 'postgres', | |
| 'password': 'password', | |
| 'host': 'db', | |
| 'port': '5432' | |
| } | |
| # İlk bağlantıyı kurarak veritabanını oluştur | |
| conn = psycopg2.connect(**db_config) | |
| conn.autocommit = True # Autocommit modunu açıyoruz | |
| cur = conn.cursor() | |
| # Veritabanını oluştur | |
| try: | |
| cur.execute("DROP DATABASE IF EXISTS blp205;") | |
| cur.execute("CREATE DATABASE blp205;") | |
| except psycopg2.errors.DuplicateDatabase: | |
| print("Veritabanı zaten mevcut. 'blp205' veritabanı oluşturulamıyor.") | |
| cur.close() | |
| conn.close() | |
| # Yeni veritabanına bağlanıyoruz | |
| db_config['dbname'] = 'blp205' # Artık yeni veritabanına bağlanıyoruz | |
| # Bağlantıyı kur | |
| conn = psycopg2.connect(**db_config) | |
| cur = conn.cursor() | |
| # Tabloları oluştur | |
| cur.execute(""" | |
| CREATE TABLE IF NOT EXISTS students ( | |
| id SERIAL PRIMARY KEY, | |
| student_id VARCHAR(10) UNIQUE NOT NULL, | |
| first_name VARCHAR(100), | |
| last_name VARCHAR(100), | |
| email VARCHAR(100) UNIQUE NOT NULL | |
| ); | |
| """) | |
| cur.execute(""" | |
| CREATE TABLE IF NOT EXISTS courses ( | |
| id SERIAL PRIMARY KEY, | |
| course_name VARCHAR(100) NOT NULL | |
| ); | |
| """) | |
| cur.execute(""" | |
| CREATE TABLE IF NOT EXISTS enrollments ( | |
| student_id INTEGER REFERENCES students(id), | |
| course_id INTEGER REFERENCES courses(id), | |
| PRIMARY KEY (student_id, course_id) | |
| ); | |
| """) | |
| conn.commit() | |
| # Faker nesnesi oluştur | |
| fake = Faker('tr_TR') | |
| def generate_student_id(): | |
| """8 basamaklı öğrenci kimlik numarası ve 2 kontrol basamağı oluşturur.""" | |
| base_id = random.randint(10000000, 99999999) # 8 basamaklı | |
| base_id_str = str(base_id) | |
| # Kontrol basamaklarını hesaplayalım (örneğin, Luhn algoritması kullanarak) | |
| sum_digits = sum(int(digit) for digit in base_id_str) | |
| checksum1 = (10 - (sum_digits % 10)) % 10 # İlk kontrol basamağı | |
| checksum2 = (10 - ((sum_digits + checksum1) % 10)) % 10 # İkinci kontrol basamağı | |
| return f"{base_id_str}{checksum1}{checksum2}" | |
| # 100 ders oluştur | |
| courses = [] | |
| for _ in range(100): | |
| course_name = fake.catch_phrase() | |
| courses.append(course_name) | |
| cur.execute("INSERT INTO courses (course_name) VALUES (%s)", (course_name,)) | |
| conn.commit() | |
| # 1000 rastgele öğrenci oluştur | |
| students = [] | |
| for _ in range(1000): | |
| first_name = fake.first_name() | |
| last_name = fake.last_name() | |
| email = fake.unique.email() | |
| student_id = generate_student_id() # Rastgele öğrenci kimliği | |
| students.append((student_id, first_name, last_name, email)) | |
| cur.execute( | |
| "INSERT INTO students (student_id, first_name, last_name, email) VALUES (%s, %s, %s, %s)", | |
| (student_id, first_name, last_name, email) | |
| ) | |
| conn.commit() | |
| # Öğrencileri rastgele derslere kaydet | |
| for student_id in range(1, 1001): | |
| enrolled_courses = random.sample(range(1, 101), k=random.randint(1, 5)) # 1 ila 5 ders | |
| for course_id in enrolled_courses: | |
| cur.execute( | |
| "INSERT INTO enrollments (student_id, course_id) VALUES (%s, %s)", | |
| (student_id, course_id) | |
| ) | |
| conn.commit() | |
| # Temizlik | |
| cur.close() | |
| conn.close() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment