Merih Forum Programlama ve yazılım algoritmalar programlama python Flask flask uygulamasına veritabanı ekleme sqlalchemy, orm

  • 0 Oy - 0 Ortalama
  • 1
  • 2
  • 3
  • 4
  • 5
flask uygulamasına veritabanı ekleme sqlalchemy, orm

 
#1

Flask framework'ü varsayılan olarak bir veritabanı ile gelmez. Bu geliştiricilere büyük bir esneklik sağlamaktadır. Bütün veritabanları ile çalışabilirsiniz.
Başlangıç için python ile gelen sqlite veritabanını kullanacağız. Hem dosya tabanlı olduğundan, server kurulumu yoktur, hemde taşınabilir olması büyük bir ayrıcalıktır.
ORM:
Object Relational Mapper. ORM kütüphaneleri aracılığıyla tablolarınızı sınıf olarak kodlarsınız, onlar bu sınıfları veritabanında tablolara haritalarlar. Python ekosisteminde oldukça popular olan SQLAlchemy bu orm kütüphanelerinden biridir. Bu ORM'nin Flask eklentiside mevcuttur.
Eklentiyi kurmak için:
Kod:
$ pip install flask-sqlalchemy


Not:
Bu eklentiyi kullanmadan da flask ile geliştireceğiniz uygulamanızda sqlalchemy kütüphanesini kullanabilirsiniz.

Şimdi örnek olarak bir sınıf oluşturalım ve flask-sqlalchemy eklentisi ile kullanalım:
Kod:
#hello.py
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy(app)
class User(db.Model):
   __tablename__ = 'users'
   id = db.Column(db.Integer, primary_key=True, autoincrement=True)
   username = db.Column(db.String(64), unique=True)

Tablolara karşılık gelecek olan sınıfların 
Kod:
db.Model

 sınıfından türetilmeleri gerekir. 

Kod:
__tablename__

 attribute'ü özel olarak tanımlanır ve tablo isimlendirilirken bu isim kullanılır. Sınıfın diğer özellikleri tablo alanlarına karşılık gelirler. Bu alanların veri tipleri yine eklentiden alınır. 

Kod:
unique

, attributü o alanın tekil olmasını sağlar, tabloya aynı veri girilmesi durumunda hata verir. 

Kod:
autoincrement

, otomatik artacak değeri arttırılması istenen sütüna verilebilir. 

Kod:
primary_key

, o alanı birincil anahtar yapar.

Bu sınıfın tablo olarak oluşturulacağı veritabanı belirtilmelidir. Sqlite için 
Kod:
SQLALCHEMY_DATABASE_URI

:

Kod:
app.config.update(
   SQLALCHEMY_DATABASE_URI = 'sqlite:///data.sqlite',
   SECRET_KEY = "g.i/r5h)s-kc"
)

mysql için: 
Kod:
SQLALCHEMY_DATABASE_URI = 'mysql+driver://user:passwor@host/dbname'

 postgresql için: 

Kod:
SQLALCHEMY_DATABASE_URI = 'postgresql+driver://user:passwor@host/dbname'

örnek olarak mysql ve postgresql için de yapılandıralım:
Kod:
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://metmirr:12345@localhost/testdb'
SQLALCHEMY_DATABASE_URI = 'postgresql+psycopg2://metmirr:12345@localhost/testdb'

driverları yüklemek için:
Kod:
$pip install pymysql
$pip install psycopg2

Not: Sqlite hariç belirtilen veritabanları oluşturulmuş olmalıdır. Oluşturulan bu sınıfların tablolara dönüştürülmesi için 
Kod:
db.create_all()

 metodu çağrılmalıdır. Ek olarak sqlalchemy kendisi yüklü olan bu driverları kullanır, herhangi bir import işlemi yapmanıza gerek yoktur.

Veri tabanı için tam kod:
Kod:
#hello.py
from flask import Flask
from flask_script import Manager
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
manager = Manager(app)
db = SQLAlchemy(app)

app.config.update(
   SQLALCHEMY_DATABASE_URI = 'sqlite:///data.sqlite',
   SECRET_KEY = "g.i/r5h)s-kc"
)

class User(db.Model):
   __tablename__ = 'users'
   id = db.Column(db.Integer, primary_key=True, autoincrement=True)
   username = db.Column(db.String(64), unique=True)

@app.route('/')
def index():
   return "index page"

if __name__ == '__main__':
   manager.run()

Şimdi uygulamamız hazır durumda ancak tablomuz oluşturlmadı henüz, oluşturmak için:
Kod:
$ python hello.py shell
> from hello import db
> db.create_all()

Tablolar oluşturuldu. Kayıt ekleyelim:
Kod:
$ python hello.py shell
> from hello import User, db
> user = User(username="mtndmr")
> db.session.add(user)
> db.session.commit()
>
> # Sorgulama yapalım
> u = User.query.filter_by(username="mtndmr")
> u.username
mtndmr
> u.id
1

Kayıt eklemek için model sınıfın örneği oluşturulup ayrı ayrı alan değerleri verilebilir:
Kod:
> user = User()
> user.username = "mtndmr"
> db.session.add(user)
> db.session.commit()

yada örneğimizde direk model sınıfının yapılandırıcısına verilebilir. 
Kod:
session

 nesnesi nesneyi veritabanına eklemek için tutar. 

Kod:
commit()

 metodu ile nesne veritabanına işlenir.




Bul
Alıntı


Benzer Konular...
Konu: Yazar Cevaplar: Gösterim: Son Mesaj
  Flask ile örnek bir uygulama altyapısı efsane 1 3,104 30-05-2017, Saat: 18:14
Son Mesaj: dalaylama
  database migration, Flask-migrate eklentisi efsane 0 2,278 30-05-2017, Saat: 17:21
Son Mesaj: efsane
  sqlalchemy tablo sorgulama filtreleri ve sorgu çalıştırıcılar efsane 0 2,298 30-05-2017, Saat: 17:20
Son Mesaj: efsane
  Flask-sqlalchemy ile tablo oluşturma, tablolar arasında ilişki tanımlama efsane 0 2,573 30-05-2017, Saat: 17:19
Son Mesaj: efsane
  Flask-sqlalchemy eklentisi, sütun veri tipleri efsane 0 2,227 30-05-2017, Saat: 17:18
Son Mesaj: efsane

Digg   Delicious   Reddit   Facebook   Twitter   StumbleUpon  


Bu konuyu görüntüleyen kullanıcı(lar):
1 Ziyaretçi

   
Türkçe Çeviri: Emre KRMN, Kodlayanlar MyBB, © 2002-2024 MyBB Group.  



Merih Forum® bilgi paylaşım platformu. 2015-∞ Tüm hakları saklıdır.