Skip to content

Instantly share code, notes, and snippets.

@baran
Created October 25, 2024 11:03
Show Gist options
  • Select an option

  • Save baran/3f0353f4382a9270b0d71aa5a1bdbaa7 to your computer and use it in GitHub Desktop.

Select an option

Save baran/3f0353f4382a9270b0d71aa5a1bdbaa7 to your computer and use it in GitHub Desktop.
BLP205 - 25.10.2024
-- 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;
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
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"]
#!/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
psycopg2-binary
Faker
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