İPUCU

Python Artificial Intelligence’da en çok kullanılan dildir ve gerekli dökümanların paylaşım alanlar burada paylaşılmaktadır.

Seçenekler

MongoDB ve Python

Gbmdpof - ait Kullanıcı Resmi (Avatar)
Kıdemli Yazılımcı
Üyelik tarihi:
09/2016
Mesajlar:
1.998
Konular:
157
Teşekkür (Etti):
197
Teşekkür (Aldı):
712
Ticaret:
(0) %
17-08-2018 13:29
#1
MongoDB ve Python
[COLOR="WhiteKlasik veritabanı sistemleri bazen bize oldukça sıkıntı oluşturabiliyor, bazı küçük işlemler için bile tüm veritabanı yapısını değiştirmemiz gerekebiliyor. Bu durumlarda ise NoSQL bize oldukça kolaylık sağlıyor. Kısaca bahsetmek gerekirse NoSQL, SQL'den farklı bir şekilde verileri saklar. Bu NoSQL veritabanı türüne göre JSON, anahtar-değer, vs. olabilir. Ayrıca NoSQL'de her kayıt, aynı türden olmak zorunda değil. Bu da bize oldukça esnek ve rahat bir kullanım sağlıyor. NoSQL'in diğer güzelliği ise SQL'de katı şema kurallarına uymak gerekirken NoSQL'de böyle şeylere bağlı olmamız gerekmiyor. Bunlar dışında tabii birçok farklılık var fakat bunlar bilmeniz gereken birkaç önemli farklılıklardan birkaçı.

Siz, kendi durumunuza göre en uygun veritabanı türünü ikisinin de avantajlarını ve dezavantajlarını göze alarak seçmelisiniz. Burada NoSQL ne kadar güzel gözükse de bazı durumlarda SQL'e de ihtiyacınız olacak.

NoSQL'in bir diğer güzel yönü de farklı senaryolarda kullanabileceğiniz farklı veritabanı türlerine sahip olması:
Bunlar dışında birkaç tane daha var, fakat bunlar en yaygın kullanılanlar.

[COLOR="Red PyMongo adında bir kütüphane kullanacağız. Biz burada birkaç örnek üzerinden gideceğiz ama eğer daha fazla şey öğrenmek isterseniz, dökümantasyonlarına bakabilirsiniz.

İlk önce PyMongo'yu pip ile kuralım:
Kod:
pip install pymongo

Kurduğunuza göre her şeyin doğru olup olmadığına bakmak için Python shelli üzerinden PyMongo'yu import edelim:
Kod:
>>> import pymongo
Eğer bir hata olmadan çalışıyorsa her şey tamam demektir.

Sonrasında ise MongoDB'nin asıl veritabanını kurmanız gerek. Bunun her sistem için açıklamalarını yazmayacağım. Kendi sitelerinde zaten var. Buraya tıklayarak nasıl indirileceğinizi anlatan yazılarına gidebilirsiniz.

Ben Ubuntu üzerinde ilk komutta hata aldım, aynı hatayı alan varsa onun yerine bu komutu kullanabilirler:
Kod:
curl https://www.mongodb.org/static/pgp/server-3.4.asc | sudo apt-key add -
İndirdikten sonra, mongod komutu ile Mongo daemon'u başlatın.

Şimdi öncelikle Python'da MongoClient nesnesi ile bağlantıyı kuralım. Bunun için pymongo'dan MongoClient'ı import etmeliyiz. Bunu, bağlantıyı kurmak için kullanacağız:
Kod:
from pymongo import MongoClient
client = MongoClient()
Bu kod ile, varsayılan sunucu ve porta (localhost, 27017) bağlanacaksınız. Ayrıca aşağıdaki şekilde kullanarak bunu değiştirebilirsiniz.
Kod:
client = MongoClient('localhost', 27017)
Veya Mongo URI formatını da kullanabilirsiniz:
Kod:
client = MongoClient('mongodb://localhost:27017')
Bunların hepsi aynı şeyi yapıyor, istediğinizi kullanabilirsiniz.

MongoClient ile bağlandığınıza göre istediğiniz veritabanına bağlanabilirsiniz. Veritabanı adını attribute kullanarak belirtebilirsiniz:
Kod:
db = client.pymongo_test
Veya dict kullanıyormuş gibi de erişebilirsiniz:
Kod:
db = client['pymongo_test']
Ayrıca bağlandığınız veritabanının var olup olmaması önemli değil. Veritabanı adı belirtip, oraya veri kaydederek otomatik olarak veritabanı oluşturuyorsunuz zaten.

MongoDB ile veritabanınıza veri eklemek, oldukça kolaydır. Bu örnekte, posts kolleksiyonuna yeni bir post ekleyelim.

Kod:
posts  = db.posts
post_data = {
    'title': 'MongoDB ve Python',
    'content': 'PyMongo <3',
    'author': 'Gbmdpof'
}

result = posts.insert_one(post_data)
print('One post: {0}'.format(result.inserted_id))
Bir komut ile birden fazla döküman ekleceksek, insert_one()'dan daha hızlı olarak insert_many() kullanabiliriz.

Kod:
post_1 = {
    'title': 'Python and MongoDB',
    'content': 'PyMongo is fun, you guys',
    'author': 'Scott'
}
post_2 = {
    'title': 'Virtual Environments',
    'content': 'Use virtual environments, you guys',
    'author': 'Scott'
}
post_3 = {
    'title': 'Learning Python',
    'content': 'Learn Python, it is easy',
    'author': 'Bill'
}
new_result = posts.insert_many([post_1, post_2, post_3])
print('Multiple posts: {0}'.format(new_result.inserted_ids))
Bu kodları çalıştırınca, buna benzer bir çıktı almış olmanız lazım:
Kod:
One post: 5b76a0ba96bb303828d8bbd2
Multiple posts: [
ObjectId('5b76a0ba96bb303828d8bbd3'), 
ObjectId('5b76a0ba96bb303828d8bbd4'), 
ObjectId('5b76a0ba96bb303828d8bbd5')
]
Veri almak da aynı veri girmek kadar kolay. Bunda da find_one() metodunu kullanıyoruz. Burada kullanacağımız argüman, bulunacak alanları içeren bir dict. Aşağıdaki örnekte Gbmdpof tarafından yazılmış yazıyı bulacağız.

Kod:
gbmdpofs_post = posts.find_one({'author': 'Gbmdpof'})
print(gbmdpofs_post)
Bu, bu çıktıyı vermiş olmalı:
Kod:
{
'_id': ObjectId('5b76a00296bb30379f7603d6'),
'title': 'MongoDB ve Python',
'content': 'PyMongo <3',
'author': 'Gbmdpof'
}
Göreceksiniz ki, post'un ObjectId'si _id keyinin altında saklanıyor. Bu benzersin değeri, ileride o girdiyi bulmak için kullanabilirsiniz. Eğer birden çok döküman almak istersek ise, find() metodunu kullanıyoruz. Bu sefer Scott tarafından yazılmış tüm postları alalım.

Kod:
scotts_posts = posts.find({'author': 'Scott'})
print(scotts_posts)
Çalıştırınca:
Kod:
<pymongo.cursor.Cursor object at 0x109852f98>
Bunda, bir array döndürmedi. Bunun yerine Cursor nesnesinden döndürdü. Bu Cursor, birkaç yardımcı metod içeren iterable bir nesnedir. Her dökümanı almak için, for döngüsü ile itarate etmemiz yeterli:
Kod:
for post in scotts_posts:
    print(post)
Bu konuda basit PyMongo ve MongoDB'den bahsettik ve basit işlemleri yaptık. MongoDB ve PyMongo hakkında daha fazla şey öğrenmek isterseniz, kendi sitelerindeki resmi dökümantasyonuna bakabilirsiniz.
[/COLOR]
---------------------
~humanity is overrated~
k3~ Teşekkür etti.
chriswolty - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
08/2018
Nereden:
Berlin
Mesajlar:
94
Konular:
28
Teşekkür (Etti):
1
Teşekkür (Aldı):
27
Ticaret:
(0) %
17-08-2018 13:31
#2
güzel anlatmışsınız yararlı konu teşekkür ederim
Sadrazam99 c99 - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
01/2017
Nereden:
Cheat Engine
Mesajlar:
1.161
Konular:
68
Teşekkür (Etti):
988
Teşekkür (Aldı):
162
Ticaret:
(0) %
17-08-2018 13:42
#3
Ellerinize sağlık
---------------------
kimse bizi sevmez çünkü doğrulardan kaçarlar, ]
k3~
k3~ - ait Kullanıcı Resmi (Avatar)
Özel Üye
Üyelik tarihi:
10/2015
Mesajlar:
2.881
Konular:
202
Teşekkür (Etti):
1743
Teşekkür (Aldı):
3389
Ticaret:
(0) %
17-08-2018 23:58
#4
Eline sağlık

Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler

Yetkileriniz
Sizin Yeni Konu Acma Yetkiniz var yok
You may not post replies
Sizin eklenti yükleme yetkiniz yok
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodları Kapalı
Trackbacks are Kapalı
Pingbacks are Kapalı
Refbacks are Kapalı