Bu blog yazısında, Python'un popüler web framework'ü Flask ile birlikte SQLAlchemy ORM'in nasıl kullanıldığını detaylı bir şekilde ele alacağız. Flask uygulamanıza veritabanı entegrasyonunu ve ORM yapısının temellerini öğreneceksiniz.
Python, web geliştirme için oldukça popüler bir dil ve Flask, hafif ve esnek yapısıyla öne çıkan bir web framework'ü. Veritabanı işlemlerini kolaylaştırmak için SQLAlchemy gibi bir ORM (Object-Relational Mapping) kullanmak, veritabanı ile Python arasında köprü görevi görür. Bu rehberde, Flask uygulamanızda SQLAlchemy kullanarak nasıl veritabanı işlemleri yapabileceğinizi adım adım anlatacağız.
İçindekiler
- Flask ve SQLAlchemy Kurulumu
- Veritabanı Bağlantısı
- Model Tanımları
- Veritabanı İşlemleri (CRUD)
- İlişkiler (Relationships)
- Migration İşlemleri
- Örnek Proje
1. Flask ve SQLAlchemy Kurulumu
Öncelikle Flask ve SQLAlchemy paketlerini yüklememiz gerekiyor. Bunun için terminalde aşağıdaki komutları kullanabilirsiniz:
pip install Flask pip install Flask-SQLAlchemy
Bu komutlar, Flask ve SQLAlchemy kütüphanelerini projenize dahil eder.
2. Veritabanı Bağlantısı
Flask uygulamanıza veritabanı bağlantısını tanımlamak için Flask-SQLAlchemy'yi kullanacağız. app.py dosyanızda aşağıdaki gibi bir yapı oluşturabilirsiniz:
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mydatabase.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app)
Burada, SQLALCHEMY_DATABASE_URI ile SQLite veritabanına bağlandık. Diğer veritabanı türleri (PostgreSQL, MySQL vb.) için bağlantı URI'si farklı olacaktır.
3. Model Tanımları
SQLAlchemy ile veritabanı modellerini sınıflar olarak tanımlayabilirsiniz. Aşağıda basit bir User modeli örneği bulunmaktadır:
class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True, nullable=False) email = db.Column(db.String(120), unique=True, nullable=False) def __repr__(self): return f'<User {self.username}>'
Bu model, users adında bir tablo oluşturur ve id, username ve email sütunlarını tanımlar.
4. Veritabanı İşlemleri (CRUD)
CRUD işlemleri, veri tabanı ile ilgili temel işlemleri kapsar: Create, Read, Update ve Delete. SQLAlchemy ile bu işlemleri kolayca yapabilirsiniz.
Veri Ekleme (Create)
new_user = User(username='john', email='john@example.com') db.session.add(new_user) db.session.commit()
Veri Okuma (Read)
user = User.query.filter_by(username='john').first() print(user.email)
Veri Güncelleme (Update)
user = User.query.filter_by(username='john').first() user.email = 'newemail@example.com' db.session.commit()
Veri Silme (Delete)
user = User.query.filter_by(username='john').first() db.session.delete(user) db.session.commit()
5. İlişkiler (Relationships)
Veritabanı modelleri arasında ilişkiler tanımlamak da mümkündür. Aşağıda, User ve Post modelleri arasındaki bir ilişki örneği verilmiştir:
class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True, nullable=False) posts = db.relationship('Post', backref='author', lazy=True) class Post(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(100), nullable=False) content = db.Column(db.Text, nullable=False) user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
Bu örnekte, bir User birden fazla Post yazabilir ve her Post bir User'a aittir.
6. Migration İşlemleri
Veritabanı şemasında değişiklikler yapmak için Flask-Migrate paketini kullanabilirsiniz. Bu paket, veritabanı migration işlemlerini yönetmenizi sağlar. Kurulum ve kullanımı şu şekildedir:
pip install Flask-Migrate
app.py dosyanıza aşağıdaki kodları ekleyin:
from flask_migrate import Migrate migrate = Migrate(app, db)
Migration komutlarını kullanmak için terminalde aşağıdaki komutları çalıştırabilirsiniz:
flask db init flask db migrate -m "Initial migration." flask db upgrade
7. Örnek Proje
Tüm bu bilgileri kullanarak basit bir blog uygulaması oluşturabilirsiniz. Aşağıda, Flask ve SQLAlchemy kullanarak oluşturulmuş basit bir blog uygulamasının tam örneğini bulabilirsiniz:
from flask import Flask, request, jsonify from flask_sqlalchemy import SQLAlchemy from flask_migrate import Migrate app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///blog.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app) migrate = Migrate(app, db) class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True, nullable=False) posts = db.relationship('Post', backref='author', lazy=True) class Post(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(100), nullable=False) content = db.Column(db.Text, nullable=False) user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False) @app.route('/users', methods=['POST']) def create_user(): data = request.get_json() new_user = User(username=data['username']) db.session.add(new_user) db.session.commit() return jsonify({'message': 'User created'}), 201 @app.route('/posts', methods=['POST']) def create_post(): data = request.get_json() user = User.query.filter_by(username=data['username']).first() if user is None: return jsonify({'message': 'User not found'}), 404 new_post = Post(title=data['title'], content=data['content'], author=user) db.session.add(new_post) db.session.commit() return jsonify({'message': 'Post created'}), 201 if __name__ == '__main__': app.run(debug=True)
Bu rehberde, Flask ve SQLAlchemy kullanarak nasıl veritabanı işlemleri yapabileceğinizi detaylı bir şekilde ele aldık. Bu bilgilerle kendi projelerinizi geliştirirken veritabanı entegrasyonunu kolayca sağlayabilirsiniz.