<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Erkam Esen</title>
    <description>The latest articles on DEV Community by Erkam Esen (@erkamesen).</description>
    <link>https://dev.to/erkamesen</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1007606%2Fea7056a2-8764-45a7-a2cb-0c9654219cda.png</url>
      <title>DEV Community: Erkam Esen</title>
      <link>https://dev.to/erkamesen</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/erkamesen"/>
    <language>en</language>
    <item>
      <title>Python &amp; Algoritma</title>
      <dc:creator>Erkam Esen</dc:creator>
      <pubDate>Mon, 03 Apr 2023 02:30:37 +0000</pubDate>
      <link>https://dev.to/erkamesen/python-algoritma-1951</link>
      <guid>https://dev.to/erkamesen/python-algoritma-1951</guid>
      <description>&lt;p&gt;Sorular ve daha fazlası için &lt;a href="https://github.com/erkamesen/Python-ve-Algoritma"&gt;tıklayınız&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Python-ve-Algoritma
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/eChf44Gyj2VrO/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/eChf44Gyj2VrO/giphy.gif" width="320" height="137"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Algoritma
&lt;/h1&gt;

&lt;h1&gt;
  
  
  Algoritma Nedir ?
&lt;/h1&gt;

&lt;p&gt;Problemlerin çözümünün mantıksal sıralamasıdır.Günlük hayatta yapacağımız işler için hazırladığımız planlar aslında algoritmanın günlük hayatta kullanıldığının ispatıdır.Tüm programlama dillerinin temeli algoritmadır. &lt;br&gt;&lt;br&gt;
Önemli algoritma türleri: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Arama algoritmaları&lt;/li&gt;
&lt;li&gt;Bellek yönetimi algoritmaları&lt;/li&gt;
&lt;li&gt;Bilgisayar grafiği algoritmaları&lt;/li&gt;
&lt;li&gt;Birleşimsel algoritmalar&lt;/li&gt;
&lt;li&gt;Genetik algoritmalar&lt;/li&gt;
&lt;li&gt;Optimizasyon algoritmaları vb.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Akış Diyagramları
&lt;/h2&gt;

&lt;p&gt;Algoritmanın belirli semboller yardımı ile görsel bir şekilde oluşturulmasında yardımcı olur. Programlamaya başlarken planlı hareket etmek ve uygulamanın karanlık yollarında kaybolmamak için önemlidir&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EclwyB5V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/219083131-e7772ee6-5b96-4df3-adb2-9716348446c0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EclwyB5V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/219083131-e7772ee6-5b96-4df3-adb2-9716348446c0.png" alt="Akış Diyagramı" width="880" height="758"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Operatörler
&lt;/h2&gt;
&lt;h3&gt;
  
  
  İşlem Operatörleri
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Toplama operatörü: &lt;strong&gt;+ (artı)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Çarpma operatörü: &lt;strong&gt;* (yıldız)&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Çıkarma operatörü: &lt;strong&gt;– (eksi)&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;Bölme operatörü: &lt;strong&gt;/ (slash)&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;Üs alma operatörü: &lt;strong&gt;^ (caret)&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;Mod operatörü: &lt;strong&gt;% (yüzde)&lt;/strong&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  İşlem Önceliği
&lt;/h4&gt;

&lt;p&gt;1) Parantez içleri&lt;br&gt;
2) Üs alma işlemleri&lt;br&gt;
3) Çarpma ve bölme işlemleri&lt;br&gt;
4) Toplama ve çıkarma işlemleri&lt;/p&gt;
&lt;h3&gt;
  
  
  Karşılaştırma Operatörleri
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Eşit mi operatörü: &lt;strong&gt;==&lt;/strong&gt; simgesi ile ifade edilir.&lt;/li&gt;
&lt;li&gt;Eşit değil mi operatörü: &lt;strong&gt;!=&lt;/strong&gt; simgesi ile ifade edilir.&lt;/li&gt;
&lt;li&gt;Küçüktür operatörü: &lt;strong&gt;&amp;lt;&lt;/strong&gt; simgesi ile ifade edilir.&lt;/li&gt;
&lt;li&gt;Büyüktür operatörü: &lt;strong&gt;&amp;gt;&lt;/strong&gt; simgesi ile ifade edilir.&lt;/li&gt;
&lt;li&gt;Küçük veya eşittir operatörü: &lt;strong&gt;&amp;lt;=&lt;/strong&gt; simgesi ile ifade edilir.&lt;/li&gt;
&lt;li&gt;Büyük veya eşittir operatörü: &lt;strong&gt;&amp;gt;=&lt;/strong&gt; simgesi ile ifade edilir.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Mantıksal Operatörler
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Ve(and) operatörü &amp;amp;&amp;amp; simgesi ile ifade edilir.Python da "and" ile ifade edilir. True dönmesi için tüm durumların True olması gerekiyor.&lt;/li&gt;
&lt;li&gt;Veya(or) operatörü II simgesi ile ifade edilir.Python da "or" ile ifade edilir. True dönmesi için her hangi bir durumun True olması gerekiyor.&lt;/li&gt;
&lt;li&gt;Değil (not) operatörü ! simgesi ile ifade edilir.Python da "not" veya "!" ile ifade edilir. Durum True ise False, False ise True döndürüyor.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;
  
  
  Python
&lt;/h1&gt;
&lt;h2&gt;
  
  
  Temel Veri Tipleri
&lt;/h2&gt;

&lt;p&gt;integer, float, boolean, string, bytes &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;int: 783, 0, -192, 0b019(binary), 0o0642(octal), 0xF3(hexa)&lt;/li&gt;
&lt;li&gt;float: 9.23, 0.0, -1.7e-6&lt;/li&gt;
&lt;li&gt;bool: True, False&lt;/li&gt;
&lt;li&gt;str: "DörtBeş", "21", "Ben\nErkam"&lt;/li&gt;
&lt;li&gt;bytes: b"toto\xfe\775"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;☝️☝️ immutables&lt;/p&gt;
&lt;h2&gt;
  
  
  Container Veri Tipleri
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Sıralı Diziler
&lt;/h3&gt;

&lt;p&gt;hızlı index erişimi ve tekrarlanabilir değer&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;list: [7, 8, 3, 4], ["z", 5, 0.3], ["eko"] [] -&amp;gt; Mutable&lt;/li&gt;
&lt;li&gt;tuple: (7, 8, 3, 4), 5, 0.3, "z", ("eko",) () -&amp;gt; Immutable&lt;/li&gt;
&lt;li&gt;str bytes: b"" -&amp;gt; Immutable
### Key Containers
Hızlı anahtar erişimi ve her anahtar unique&lt;/li&gt;
&lt;li&gt;dictionary -&amp;gt; dict {"key":"value"} dict(a=2, b=0.3, c="sa") {}&lt;/li&gt;
&lt;li&gt;collection -&amp;gt; set {"key1", "key2"} {1, 9, 3, 0} set() &lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Değişken Tanımlama
&lt;/h2&gt;

&lt;p&gt;Python programlarımızda bellekte geçici olarak veri saklamak için oluşturduğumuz alanlara değişken denir.Eşitliğin sağ tarafı değerimizi&lt;br&gt;
sol tarafı ise değişkenimizin adını gösterir.&lt;/p&gt;

&lt;p&gt;x=2 &lt;br&gt;&lt;br&gt;
# 2 -&amp;gt; integer&lt;/p&gt;

&lt;p&gt;a=b=c=0 -&amp;gt; 3 Farklı değşkene aynı değeri atamak &lt;br&gt;&lt;br&gt;
# 0 -&amp;gt; integer&lt;/p&gt;

&lt;p&gt;y, z, r=0.2, -7.6, 0 - Çoklu değişken atama&lt;br&gt;
# y=0.2, z=-7.6, r=0 &lt;/p&gt;

&lt;p&gt;a, b=b, a değişken swap leme&lt;/p&gt;



&lt;p&gt;Dizi Açılımı&lt;br&gt;
a, *b = seq &lt;br&gt;&lt;br&gt;
*a , b = seq&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;a, *b = ["a", 2, True, 3.2, "c"]
# a = "a"
# b = [2, True, 3.2, 'c']
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;*a, b = ["a", 2, True, 3.2, "c"]
# a = ['a', 2, True, 3.2]
# b = "c"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;x += 1 &amp;lt;-&amp;gt; x = x + 1 &lt;br&gt;&lt;br&gt;
x -= 2 &amp;lt;-&amp;gt; x = x - 2 &lt;br&gt;&lt;br&gt;
x *= 3 &amp;lt;-&amp;gt; x = x * 3 &lt;br&gt;&lt;br&gt;
x /= 4 &amp;lt;-&amp;gt; x = x / 4 &lt;br&gt;&lt;br&gt;
x %= 5 &amp;lt;-&amp;gt; x = x % 5 &lt;br&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;p&gt;x = None  -&amp;gt; undefined&lt;/p&gt;

&lt;p&gt;del x -&amp;gt; Değişkeni silme&lt;/p&gt;
&lt;h2&gt;
  
  
  Dönüşümler
&lt;/h2&gt;

&lt;p&gt;type() ile elimizdeki verinin türünü öğrenebiliriz.&lt;/p&gt;

&lt;p&gt;type("a") -&amp;gt;  &lt;br&gt;&lt;br&gt;
type(13) -&amp;gt;  &lt;br&gt;&lt;br&gt;
type(1.5) -&amp;gt;  &lt;br&gt;&lt;br&gt;
type(False) -&amp;gt;  &lt;br&gt;&lt;br&gt;
type(b"bc0ca") -&amp;gt;  &lt;br&gt;&lt;br&gt;
type(None) -&amp;gt;  &lt;br&gt;&lt;/p&gt;

&lt;p&gt;Şimdi veri tiplerinin kendi arasındaki dönüşümlerine göz atalım.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;int("15") -&amp;gt; 15 
&lt;/li&gt;
&lt;li&gt;int(16,86) -&amp;gt; 16 &amp;gt; Float kısmı kesiyor yuvarlama işlemi daima tabana oluyor. 
&lt;/li&gt;
&lt;li&gt;float(-44) -&amp;gt; -44.0 
&lt;/li&gt;
&lt;li&gt;round(23.12491204, 1) -&amp;gt; 23.1 &amp;gt; 2. parametre(virgülden sonrası) float kısmın basamak sayısını belirtmek için kullanılıyor. 
&lt;/li&gt;
&lt;li&gt;list("abc") -&amp;gt; ["a", "b", "c"] 
&lt;/li&gt;
&lt;li&gt;dict([(3, "three"), (1, "one")]) -&amp;gt; {1:"one", 3:"three"} 
&lt;/li&gt;
&lt;li&gt;set([one,two]) -&amp;gt; {"one", "two"}  &lt;/li&gt;
&lt;li&gt;str(5) -&amp;gt; "5" 
--- --- --- ---&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Dizilerde Slice ve Index
&lt;/h2&gt;

&lt;p&gt;Dizideki ilk itemin indexi 0, son itemin indexi -1 dir.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vPF7Fehz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/219366076-43526a7e-4d86-4581-9e19-fef769b1d4cd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vPF7Fehz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/219366076-43526a7e-4d86-4581-9e19-fef769b1d4cd.png" alt="image" width="353" height="103"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dizideki item sayısı -&amp;gt; len(lst) = 5  &lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Index
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;lst[0] = 10  &lt;/li&gt;
&lt;li&gt;lst[1] = 20  &lt;/li&gt;
&lt;li&gt;lst[2] = 30  &lt;/li&gt;
&lt;li&gt;lst[3] veya lst[-2] = 40  &lt;/li&gt;
&lt;li&gt;lst[4] veya lst[-1] = 50  &lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Slice
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;lst[başlangıçIndex:bitişIndex:Adım]&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;lst[::] = [10, 20, 30, 40, 50]&lt;/li&gt;
&lt;li&gt;lst[:] = [10, 20, 30, 40, 50]&lt;/li&gt;
&lt;li&gt;lst [:-1] = [10, 20, 30, 40]&lt;/li&gt;
&lt;li&gt;lst[1:-1] = [20, 30, 40]&lt;/li&gt;
&lt;li&gt;lst[::2] = [10, 30, 50]&lt;/li&gt;
&lt;li&gt;lst[::-1] = [50, 40, 30, 20, 10]&lt;/li&gt;
&lt;li&gt;lst[::-2] = [50, 30, 10]&lt;/li&gt;
&lt;li&gt;lst[1:3] = [20,30]&lt;/li&gt;
&lt;li&gt;lst[-3:-1] = [30,40]&lt;/li&gt;
&lt;li&gt;lst[:3] = [10, 20 30]&lt;/li&gt;
&lt;li&gt;lst[3:] = [40, 50]&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Koşullar
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vQ7k9P9o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/219370219-8da20fab-9aa9-4dd3-beb1-22f921cf63c5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vQ7k9P9o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/219370219-8da20fab-9aa9-4dd3-beb1-22f921cf63c5.jpg" alt="if-else-flowchart" width="815" height="1057"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if koşul:
    statements block
elif koşul:
    statements block
else:
    statements block

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eğer if bloğundaki koşul doğru ise blokda yazılan kodlar çalışacaktır. &lt;br&gt; &lt;br&gt;
Eğer if bloğundaki koşul doğru değil ise ve elif bloğu var ise elif bloğu çalışacaktır. &lt;br&gt; &lt;br&gt;
Eğer koşulların hiç biri gerçekleşmez ise else bloğu çalışacaktır. &lt;br&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yas=19
if yas&amp;lt;18:
  print("Çocuk")
elif yas&amp;gt;65:
  print("Yaşlı")
else:
  print("Genç")

# Genç
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eğer koşulları etkili bir şekilde kullanmak istiyorsak hangi durumların True hangi durumların False döndüreceğini bilmemiz gerekiyor.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;bool(0) -&amp;gt; False&lt;/li&gt;
&lt;li&gt;bool(1) -&amp;gt; True&lt;/li&gt;
&lt;li&gt;bool(-152123213) -&amp;gt; True&lt;/li&gt;
&lt;li&gt;bool([]) -&amp;gt; False&lt;/li&gt;
&lt;li&gt;bool(["a", 2, False]) -&amp;gt; True&lt;/li&gt;
&lt;li&gt;bool({}) -&amp;gt; False&lt;/li&gt;
&lt;li&gt;bool({1, 3}) -&amp;gt; True&lt;/li&gt;
&lt;li&gt;bool(None) -&amp;gt; False&lt;/li&gt;
&lt;li&gt;bool(b"") -&amp;gt; False&lt;/li&gt;
&lt;li&gt;bool(b"x") -&amp;gt; True&lt;/li&gt;
&lt;li&gt;bool("") -&amp;gt; False&lt;/li&gt;
&lt;li&gt;bool("3") -&amp;gt; True&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Örnek vermek gerekirse bir web sitesinden veri çekiceksiniz.Veriyi çekmeden önce verileri eklemek için bir liste oluşturalım.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;veri_cek = []&lt;br&gt;
programımızı çalıştırdığımızda koşul için şöyle bir if-else bloğu yazabiliriz.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if veri_cek:
    # Veri çekilirse yapılacak işlemler.
else:
    # Veri çekilmezse yapılacak işlemler.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Özetlemek gerekirse; eğer veri çekilip de listemize eklenirse listemiz True değer döndürecektir lakin siteden veri kalkmış olabilir veya HTML tag leri değişmiş olabilir böyle bir durumda veriyi çekemeyeceğimizden listemiz boş olacaktır bu sebeple bize False değer döndürecektir ve dolayısıyla else bloğu çalışacaktır.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hata Yakalama
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--F7rE2O2g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/219376767-2fea18f2-d3de-48c1-9e06-b5f43c0bf88e.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--F7rE2O2g--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/219376767-2fea18f2-d3de-48c1-9e06-b5f43c0bf88e.jpg" alt="12345 finally 1" width="334" height="320"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;try:
    Normal durumda çalışan blok
except &amp;lt;Hataismi&amp;gt;:
    İsmi verilen hata gerçekleştiğinde çalışacak blok
    """ EĞER İSİM VERİLMEZSE SADECE except: YAZILIRSA TÜM HATALARI YAKALAR"""
finally:
    Hata olsa da olmasa da en son çalışacak blok
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Döngüler
&lt;/h2&gt;

&lt;h3&gt;
  
  
  While Döngüsü
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--S4SA5ctf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/219427685-dfb78785-0661-4fdd-872a-c692aac1bfd4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--S4SA5ctf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/219427685-dfb78785-0661-4fdd-872a-c692aac1bfd4.png" alt="623c0c66fad507a80764a3f5_while-loop-flowchart" width="838" height="1068"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;verilen koşul True olduğu sürece sonsuza kadar dönebilen döngülerdir.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;while koşul:
    # koşul True ise gerçekleşicek kod.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Loop Control&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Break -&amp;gt; Döngüyü durdur.&lt;/li&gt;
&lt;li&gt;continue -&amp;gt; Adımı atla.
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;s = 0
i = 1
while i &amp;lt;= 100:
    s += i**2
    i+=1
print("Toplam:", s)
# Toplam: 338350
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Burda her adımda ilk olarak i nin karesini alıp s değişkeni ile topluyoruz ve s değişkenini güncelliyoruz.&lt;br&gt;
Ardından her döngüde i değerini 1 arttırıyoruz. i 100 veya 100 den küçük olduğu sürece koşulumuz True döneceği için döngü devam ediyor.&lt;br&gt;
i 101 olduğu an while döngüsünün kapısında bekleyen bodyguardlar tarafından hoop dur hemşerim nereye denilerek hor görülüyor ve içeri alınmıyor :)&lt;/p&gt;
&lt;h3&gt;
  
  
  For Döngüsü
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dj0JW0uZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/219440910-f21b0b04-e95e-4c63-8286-10ec343f4019.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dj0JW0uZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/219440910-f21b0b04-e95e-4c63-8286-10ec343f4019.png" alt="623c0c5447c67e81d4ac3f35_for-loop-flowchart" width="787" height="1068"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;for loopu verilen dizinin her elemanını döndüğü için koşula bağlı olmaktan ziyade item sayısı kadar döner.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for &amp;lt;variable&amp;gt; in dizi:
    # kod bölümü
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Listelerde for: &lt;br&gt;&lt;/p&gt;

&lt;p&gt;Listenin uzunluğu kadar bir döngü oluşturur ve değişkene teker teker listenin içindeki itemleri tanımlar.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;isim_listesi = ["Erkam","Ensar","Furkan"]
for isim in isim_listesi:
    print(isim)
# Erkam
# Ensar
# Furkan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Stringlerde for: &lt;br&gt;&lt;/p&gt;

&lt;p&gt;stringler de for döngüsü ile tüm karakterleri teker teker dolaşabiliriz.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kelime = "safranbolu çok güzel şehirdir."
count = 0
for harf in kelime:
    if harf == "a":
        count += 1
print(count)
# 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;range() ile for: &lt;br&gt;&lt;/p&gt;

&lt;p&gt;range() fonksiyonu bize girilen değere kadar (varsayılan olarak 0 dan başlayıp) verilen değere kadar olan sayıları kapsayan bir dizi oluşturur.&lt;br&gt;
range(başlangıç, bitiş, adım)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;meyveler = ["elma","armut","kivi","portakal","mandalina","greyfurt"]
for i in range(len(meyveler)):
    if i%2 == 0:
        print(meyveler[i])
# elma
# kivi
# mandalina
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;list(range(5)) -&amp;gt; [0,1, 2, 3, 4]&lt;/li&gt;
&lt;li&gt;set(range(3, 7)) -&amp;gt; {3, 4, 5, 6, 7}&lt;/li&gt;
&lt;li&gt;tuple(range(2, 12, 3) -&amp;gt; (2, 5, 8, 11)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  print() Parametreleri
&lt;/h2&gt;

&lt;p&gt;Default olarak:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;sep=" "&lt;/li&gt;
&lt;li&gt;end = "\n"&lt;/li&gt;
&lt;li&gt;file = sys.stdout&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;"sep" parametresi virgül ile ayırıp display etmek için yazdığımız parametreleri varsayılan olarak aralarında birer boşluk(" ") bırakarak bize çıktısını veriyor. &lt;br&gt;&lt;br&gt;
Eğer farklı bir karakter harf vs. ile ayırmak istiyorsak bunu belirtmemiz yeterli.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;print("elma","armut","kiraz","kivi")
# elma armut kiraz kivi
print("elma","armut","kiraz","kivi", sep="-")
# elma-armut-kiraz-kivi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;"end" parametresi varsayılan olarak verilen parametreleri çıktı olarak verdikten sonra "\n" ile bir alt satıra geçer.Özellikle bunu looplarda print() kullandığımız zaman daha iyi anlayabiliriz.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for i in range(5):
    print(i)
# 0
# 1
# 2
# 3
# 4
for i in range(5):
    print(i, end=",")
# 0,1,2,3,4,
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;"file" parametresi bize çıktının nereye verileceğini gösterir varsayılan olarak kullandığımız IDE nin konsolu yani sys.stdout dur.Bir dosya açıp dilersek print() fonksiyonu ile çıktılarımızı oraya da verebiliriz.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;f = open("deneme.txt", "w") 
print("bu konsola değil txt dosyasına yazılacak", file=f)
f.close()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Fonksiyonlar
&lt;/h2&gt;

&lt;p&gt;Diğer programlama dillerinde olduğu gibi pythonda da kendimizi belli bölümlerde defalarca tekrar etmek yerine fonksiyon yazıp hem kendimizi yormayız hem de kodun okunaklığı açısından güzel bir harekette bulunmuş oluruz. Fonksiyonu bir kere yazdıktan sonra istediimiz kadar çağırıp istediğimiz yerde  def i kullandam sadece isimi ve parantez içini yazarak kullanabiliriz.&lt;/p&gt;

&lt;p&gt;def keywordu ile başlayıp fonksiyonumuzun ismi ile devam ediyoruz. Parantez içine ise parametrelerimizi yazıyoruz.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def fonksiyonAdı(a, b, c):
    """Dökümantasyon"""
    # Kodlarımızı buraya yazıyoruz.
    return res
# res i burda bir result döndürüyoruz anlamında yazdım oraya her hangi bir şey gelebilir.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;verilen 3 sayıyı toplayıp 2 ile çarpan fonksiyon:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def toplaVeCarp(sayi1, sayi2, sayi3):
    toplam = sayi1 + sayi2 + sayi3
    sonuc = toplam*2
    return sonuc
print(toplaVeCarp(1,4,8)) veya a = toplaVeCarp(1,4,8) print(a)
# 13
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;İleri düzey fonksiyonlar&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def (x, y, z, *args, a=3, b=5, **kwargs):
    # *args -&amp;gt; tuple olarak gelecektir.
    # ** kwargs -&amp;gt; dict olarak gelecektir.
    # eşitlik verilenler default olarak verilen değerlerdir.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Genel Built-in Fonksiyonlar
&lt;/h2&gt;

&lt;p&gt;lst1 = ["erik", "ayva", "vişne", "çilek"]&lt;br&gt;
lst2 = [12, 2, 7, 21]&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;len() -&amp;gt; Dizi içindeki eleman sayısını verir -&amp;gt; len(lst1) = 4&lt;/li&gt;
&lt;li&gt;min() -&amp;gt; Dizi içindeki en küçük elemanı verir eğer veri stringse karakter sayısına bakar -&amp;gt; min(lst1) = 2 &amp;amp; min(lst1) = "ayva"&lt;/li&gt;
&lt;li&gt;max() -&amp;gt; Dizi içindeki en büyük elemanı verir eğer veri stringse karakter sayısına bakar -&amp;gt; max(lst1) = 21 &amp;amp; max(lst1) = "çilek"&lt;/li&gt;
&lt;li&gt;sum() -&amp;gt; Eğer dizi içindeki elemanlar integer veya float ise hepsini toplar aksi halde hata döndürür. -&amp;gt; sum(lst2) = 42&lt;/li&gt;
&lt;li&gt;sorted() -&amp;gt; Dizi içindeki elemanları default olarak küçükten büyüğe göre sıralar. reversed=False parametresi True yapılırsa büyükten küçüğe göre sıralar -&amp;gt; sorted(lst2) = [2, 7, 12, 21] &amp;amp; sorted(lst2, reversed=True) = [21, 12, 7, 2]&lt;/li&gt;
&lt;li&gt; in dizi -&amp;gt; Eğer aradığımız değer listede varsa True, yoksa False döndürecektir. -&amp;gt; 3 in lst2 = False &amp;amp; 2 in lst2 = True&lt;/li&gt;
&lt;li&gt;zip() -&amp;gt; zip() ile birden fazla diziye indexlerine göre eşleyip tuple a çevirebiliriz. -&amp;gt; zip(lst1, lst2) =  &amp;amp;  list(zip(lst1, lst2)) = [('erik', 12), ('ayva', 2), ('vişne', 7), ('çilek', 21)]&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Dictionary Metotları
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;d[key] = value -&amp;gt; sözlüğe item eklemek
&amp;gt; d[key] -&amp;gt; # value&lt;/li&gt;
&lt;li&gt;d.update(d2) -£ 2 sözlüğü birleştirmek&lt;/li&gt;
&lt;li&gt;d.keys() d.values() d.items() -&amp;gt; Sözlüğü iterable olarak döngüde kullanmak için kullanırız. keys() sadece keyleri verir, values() sadece keylere karşılık gelen değerleri verir, items() tuple şeklinde (key, value) çifti verir.&lt;/li&gt;
&lt;li&gt;d.pop(key, None) -&amp;gt; verilen keyi value ile birlikte siler.Default olarak 2. parametresi None dur.&lt;/li&gt;
&lt;li&gt;d.get(key, None) -&amp;gt; Keyi verilen değeri getirir. Default olarak None dur.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Küme Metotları
&lt;/h2&gt;

&lt;p&gt;Operatorler:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;| -&amp;gt; union - 2 kümeyi birleştirir.&lt;/li&gt;
&lt;li&gt;&amp;amp; -&amp;gt; intersection - 2 kümenin kesişimini alır.
- - -&lt;/li&gt;
&lt;li&gt;s.update(s2) -&amp;gt; 2 kümeyi birleştirir.&lt;/li&gt;
&lt;li&gt;s.add(key) -&amp;gt; Kümeye key ekler.&lt;/li&gt;
&lt;li&gt;s.discard(key) &amp;amp; a.remove(key) -&amp;gt; verilen keyi kümeden siler&lt;/li&gt;
&lt;li&gt;s.pop() -&amp;gt; ilk elemanı atar&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Liste Metotları
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;lst.append(value) -&amp;gt; verilen değeri listenin en sonuna ekler.&lt;/li&gt;
&lt;li&gt;lst.extend(dizi) -&amp;gt; verilen değerleri listenin en sonuna ekler.&lt;/li&gt;
&lt;li&gt;lst.insert(index, value) -&amp;gt; verilen indexe verilen value yu ekler.&lt;/li&gt;
&lt;li&gt;lst.remove(value) -&amp;gt; verilen değeri listden siler.&lt;/li&gt;
&lt;li&gt;lst.pop(index) -&amp;gt; indexi verilen değeri listeden atar. Varsayılan olarak en sonuncuyu atar.&lt;/li&gt;
&lt;li&gt;lst.sort &amp;amp; lst.reverse() -&amp;gt; listeyi sıralar / terse çevirir.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  String Metotları
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;s.startswith() -&amp;gt; string verilen parametre ile başlıyorsa True başlamıyorsa False döndürür.&lt;/li&gt;
&lt;li&gt;s.endswith() -&amp;gt; string verilen parametre ile bitiyorsa True bitmiyorsa False döndürür.&lt;/li&gt;
&lt;li&gt;s.count() -&amp;gt; verilen karakterin stringde ki sayısını döndürür.&lt;/li&gt;
&lt;li&gt;s.index() -&amp;gt; verilen karakterin bulunduğu ilk indexi döndürür.&lt;/li&gt;
&lt;li&gt;s.upper() -&amp;gt; Tüm harfleri büyük yapar.&lt;/li&gt;
&lt;li&gt;s.lower() -&amp;gt; Tüm harfleri küçük yapar.&lt;/li&gt;
&lt;li&gt;s.title() -&amp;gt; Tüm kelimelerin ilk harfini büyük yapar.&lt;/li&gt;
&lt;li&gt;s.capitalize() -&amp;gt; Yalnızca ilk kelimenin ilk harfini büyük yapar.&lt;/li&gt;
&lt;li&gt;s.strip() -&amp;gt; Sağ ve soldaki fazla boşlukları yok eder.&lt;/li&gt;
&lt;li&gt;s.lstrip() &amp;amp; s.rstrip() -&amp;gt; sol/sağ boşlukları yok eder.&lt;/li&gt;
&lt;li&gt;s.split() -&amp;gt; belirtilen karakterden stringi ayırıp listeye dönüştürür varsayılan olarak " " dur.&lt;/li&gt;
&lt;li&gt;s.join() -&amp;gt; parametre olarak liste alır. liste elemanlarını kullandığımız string ile araları doldurarark birleştirir.&lt;/li&gt;
&lt;li&gt;s.isalnum() -&amp;gt; String, en az bir karakterden oluşuyor ve tüm karakterler alfanümerik (harf veya rakam) değerlerden oluşuyorsa, “TRUE” değeri üretir.&lt;/li&gt;
&lt;li&gt;s.isalpha() -&amp;gt; String, en az bir karakterden oluşuyor ve tüm karakterler alfabetik (harf) değerlerden oluşuyorsa, “TRUE” değeri üretir. &lt;/li&gt;
&lt;li&gt;s.isdecimal() -&amp;gt; String, en az bir karakterden oluşuyor ve tüm karakterler ondalık değerlerden oluşuyorsa, “TRUE” değeri üretir.&lt;/li&gt;
&lt;li&gt;s.isdigit() -&amp;gt; String, en az bir karakterden oluşuyor ve tüm karakterler rakamlardan oluşuyorsa, “TRUE” değeri üretir.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>python</category>
      <category>algorithms</category>
    </item>
    <item>
      <title>Python - Mongodb</title>
      <dc:creator>Erkam Esen</dc:creator>
      <pubDate>Tue, 28 Mar 2023 11:26:38 +0000</pubDate>
      <link>https://dev.to/erkamesen/python-mongodb-2n37</link>
      <guid>https://dev.to/erkamesen/python-mongodb-2n37</guid>
      <description>&lt;h2&gt;
  
  
  Python-MongoDB 🍃🍃🍃🍃
&lt;/h2&gt;

&lt;p&gt;MongoDB için hazırladığım notlar.. &lt;br&gt;&lt;br&gt;
&lt;a href="https://www.w3schools.com/python/python_mongodb_getstarted.asp"&gt;Kaynak&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--OPAQ1tPf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/215358239-4c22ed81-3bfe-46af-962b-b885b63359ce.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--OPAQ1tPf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/215358239-4c22ed81-3bfe-46af-962b-b885b63359ce.png" alt="MongoDB_Logo svg" width="880" height="237"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/erkamesen/Python-MongoDB"&gt;Github&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6HRd4XpD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/215347383-a9f102b0-fcd6-409c-88a7-0610230f6f9d.png" class="article-body-image-wrapper"&gt;&lt;img alt="mdb-vs-sql" src="https://res.cloudinary.com/practicaldev/image/fetch/s--6HRd4XpD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/215347383-a9f102b0-fcd6-409c-88a7-0610230f6f9d.png" width="880" height="593"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;th&gt;RDMS&lt;/th&gt;
&lt;th&gt;NoSQL&lt;/th&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Dikeyde ölçeklenebilir, yatayda ölçeklenmesi zordur.&lt;/td&gt;
&lt;td&gt;Koaly bir şekilde yatayda yada dikeyde ölçeklenebilir.Dağıtık sistemler için uygundur.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anlık veri tutarlılığı sunar.&lt;/td&gt;
&lt;td&gt;Nihai veri tutarlılığı sunar.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Olgunluk seviyesi yüksektir.Yetişmiş uzman bulmak kolaydır.&lt;/td&gt;
&lt;td&gt;RDMS kadar olgun değildir.Yetişmiş uzman bulmak zordur.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lisans ücretleri yüksek.&lt;/td&gt;
&lt;td&gt;Lisans ücretleri düşük.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h2&gt;
  
  
  Giriş
&lt;/h2&gt;

&lt;p&gt;MongoDB, PostgreSQL - MySQL gibi ilişkisel veritabanlarından farklı olarak NoSQL veritabanı olarak sınıflandırılan bir veritabanıdır.&lt;/p&gt;
&lt;h2&gt;
  
  
  NoSQL - MongoDB Nedir ?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;NoSQL&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RDMS de &lt;strong&gt;tablo ve sütunlar&lt;/strong&gt; ilişkili tutulurken &lt;strong&gt;NoSQL&lt;/strong&gt; de &lt;strong&gt;JSON&lt;/strong&gt; formatında tutulurlar.&lt;/li&gt;
&lt;li&gt;NoSQL de read-write işlemleri RDMS  ye göre çok daha hızlıdır.&lt;/li&gt;
&lt;li&gt;Büyük veri alanında NoSQL çok fazla kullanılmaktadır.
&lt;strong&gt;MongoDB&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Açık kaynak kodlu.&lt;/li&gt;
&lt;li&gt;NoSQL veri tabanı.&lt;/li&gt;
&lt;li&gt;Her kayıt bir döküman olup JSON formatında tutulur.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  NoSQL Veritabanı Özellikleri
&lt;/h2&gt;

&lt;p&gt;NoSQL veritabanı; esnek, yüksek performanslı, çok fonksiyonlu, ölçeklenebilir veritabanına ihtiyaç duyan mobil, web ve oyun gibi birçok uygulama türü için başarılı bir veritabanı çözümüdür.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Esnektir&lt;/strong&gt;: NoSQL, sağladığı esnek şemalar sayesinde daha hızlı ve daha fazla yineleme özelliğine sahip yazılımlar geliştirmeye olanak tanır. Yapılandırılmamış ya da yarı yapılandırılmış veriler için NoSQL veritabanları oldukça uygun çözümlerdir.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ölçeklenebilir&lt;/strong&gt;: NoSQL, dağıtılmış donanım kümeleri kullanılarak ölçek genişlemesi sağlanabilecek şekilde tasarlandığından, pahalı ve kalıcı sunucuların kullanım zorunluluğunu ortadan kaldırır.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Yüksek Performansa Sahiptir&lt;/strong&gt;: Belirli veri modelleri ve erişim desenleri ile optimize edilen NoSQL veritabanları, benzer fonksiyonların ilişkisel veritabanları ile gerçekleştirilmesine oranla daha yüksek performans sağlamaktadır.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Yüksek İşlevselliğe Sahiptir&lt;/strong&gt;: Sağladığı veri türleri ve API’ler, ilgili veri modeline göre hazırlandığından, NoSQL veritabanları yüksek işlevsellik oranına sahiptir.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kolay Taşınabilirliğe Sahiptir&lt;/strong&gt;: NoSQL veritabanına ait veriler disk ya da hafıza kartında kolaylıkla taşınabilmektedir.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tanımlama Kolaylığı Sağlar&lt;/strong&gt;: Diğer veritabanlarının birçoğunda olduğu gibi verileri satırlar halinde saklayarak ve diğer tablolarla ilişkilendirerek tanımlama yapılmaya gerek olmayan NoSQL veritabanlarında veriler JSON veya XML biçiminde saklanabilmektedir.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  NoSQL Veritabanı Türleri
&lt;/h2&gt;

&lt;p&gt;Belge Veritabanları: Belge veritabanları, uygulama kodlarında kullanılan aynı belge modelini kullandığından, veritabanında veri depolanmasını ve sorgulama işlemini kolaylaştırır.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Grafik Veritabanları&lt;/strong&gt;: Bağlı veri kümeleriyle çalışan uygulamalar oluşturmayı ve çalıştırmayı amaçlayan grafik veritabanları, sosyal ağlar, öneri altyapıları, dolandırıcılık işlemlerini algılama ve bilgi grafikleri gibi birçok alanda kullanılmaktadır.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Anahtar-Değer&lt;/strong&gt;: Yüksek oranda bölümlendirilebilen ve diğer veritabanı türlerinin ulaşamayacağı boyutlarda yatay ölçeklendirmeye olanak sağlayan anahtar-değer veritabanları IoT, oyun ve reklamcılık gibi alanlarda sıklıkla kullanılmaktadır.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Arama&lt;/strong&gt;: Uygulamaların birçoğu, yazılım geliştiricilerin sorun çözmelerine yardımcı olabilmek amacıyla günlükler tutar. NoSQL yarı yapılandırılmış günlükleri ve ölçümleri dizine ekleyip biriktirir ve bunlarda arama yaparak, makineler tarafından oluşturulan veriler için gerçek zamanlı sayılabilecek bir hızda görselleştirme ve analiz yapılmasına olanak tanır.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Bellek İçi&lt;/strong&gt;: Reklam teknolojisi ve oyun uygulamalarının puan tabloları, oturum bilgilerinin yer aldığı depolar ve gerçek zamanlı analitik gibi çok yüksek hızlarda yanıt alınması gereken ve her an yüksek trafik oluşabilen uygulamaların zamanında ve sorunsuz bir şekilde çalışmasını sağlar.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Başlangıç - Kurulum
&lt;/h2&gt;

&lt;p&gt;Öncelikle python ile mongodb bağlantısını yapmak için pymongo library mizi indirelim.&lt;br&gt;
Windows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install pymongo 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Linox - MacOS&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip3 install pymongo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;MongoDB yi localde veya dileğe göre cloud üzerinde çalıştırabiliriz.Biz cloud üzerinde çalıştıracağımızdan &lt;a href="https://www.mongodb.com/cloud/atlas/register"&gt;Atlas&lt;/a&gt;a kayıt olup bize verilen 512 mb lık ücretsiz kısımdan faydalanıcaz. Eğer siz localde kullanmak istiyorsanız &lt;a href="https://www.mongodb.com/"&gt;buradan&lt;/a&gt; indirebilirsiniz. &lt;br&gt;
Eğer cloud üzerinde kullanacaksanız mail üzerinden gelen onay linkine tıklayıp kayıdı tamamlıyoruz.&lt;/p&gt;
&lt;h3&gt;
  
  
  Cluster Oluşturma
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.mongodb.com/cloud/atlas/register"&gt;Atlas&lt;/a&gt; a gidip üye olun, daha önce üye olduysanız giriş yapabilirsiniz. 
&lt;/li&gt;
&lt;li&gt;Üye olup giriş yaptıktan sonra, “Clusters” sekmesi altında “Build a Database” butonuna tıklayın. 
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cXcN3vQA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/215360005-31b8dd51-0eb3-4c1d-9f20-784cdc083130.png" alt="Seçim_043" width="564" height="545"&gt;
***&lt;/li&gt;
&lt;li&gt;Çıkan seçenekler arasında “Free” altındaki “Create” butonuna tıklayın. 
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QFXra4Kv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/215360016-7e6298be-26f8-4522-9653-4f06597bd040.png" alt="Seçim_044" width="500" height="652"&gt;
***&lt;/li&gt;
&lt;li&gt;Clusterınızı Amazon AWS, Google veya Azure Cloud sağlayıcılarından herhangi birinde saklayabilirsiniz. Region olarak Frankfurt bize direkt bağlı bir hub olduğu için Frankfurt seçmeniz hız açısından faydalı olabilir. 
&lt;/li&gt;
&lt;li&gt;Seçimlerinizi yaptıktan sonra “Create Cluster” butonuna tıklayın. 
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--I674Cy9y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/215360271-01aad569-62dc-48b5-94df-8c428673eae5.png" alt="Seçim_051" width="880" height="754"&gt;
***&lt;/li&gt;
&lt;li&gt;Bir kullanıcı yaratmak için bilgilerimizi giriyoruz. Ardından Create User diyip listeye ekliyoruz.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AUqGZYlQ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/215360019-54fb0d03-6c7c-4f97-a4c7-49569eeb8210.png" alt="Seçim_048" width="721" height="547"&gt;
***&lt;/li&gt;
&lt;li&gt;Cloud Environment seçip IP adresi eşlenmediyse IP adresi girip lsiteye ekliyoruz.
&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---Ni6qwMe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/215360023-0f0486a1-0a4d-4673-9e6f-442b68a1c9b6.png" alt="Seçim_![Seçim_050](https://user-images.githubusercontent.com/120065120/215360025-87026d72-bfd4-4d6c-b4d9-d1728f38e72a.png)
049" width="749" height="661"&gt;
***&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;"Finish and Close" ve ardından "Go to Databases" diyerek clusterımıza gidiyoruz. Açılması bir müddet zaman alabilir.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---NQv_er9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/215360522-2a460355-5073-47d9-8804-ef9a602e793a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---NQv_er9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/215360522-2a460355-5073-47d9-8804-ef9a602e793a.png" alt="Seçim_050" width="861" height="640"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h3&gt;
  
  
  Bağlantı
&lt;/h3&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Cluster hazır olduğunda aşağıdaki gibi görünmesi lazım. Buradan “CONNECT” tuşuna basıyoruz.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KVFmPZ9h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/215360790-7b2ec2c0-3f64-46b4-aae3-076de92edf68.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KVFmPZ9h--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/215360790-7b2ec2c0-3f64-46b4-aae3-076de92edf68.png" alt="Seçim_052" width="880" height="323"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;"Connect your application" seçeneğini seçiyoruz.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5X5EpKev--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/215360843-94031ae0-e04c-45bc-a21e-7f224262b270.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5X5EpKev--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/215360843-94031ae0-e04c-45bc-a21e-7f224262b270.png" alt="Seçim_053" width="746" height="399"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Pythonı ve ardından kullanacağımız sürümü seçiyoruz. Kodu kopyalayıp python kodumuza yapıştırabiliriz. kısmını user eklerken kullandığımız password ile değiştirmeyi unutmayalım.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RhWIndfg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/215360892-91e9b9bf-67f7-4b1f-8be5-9fce31c14f64.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RhWIndfg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/215360892-91e9b9bf-67f7-4b1f-8be5-9fce31c14f64.png" alt="Seçim_055" width="754" height="431"&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;Artık editörümüze geçebiliriz.&lt;br&gt;
&lt;/p&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import pymongo 
from pymongo import MongoClient #MongoClient sınıfımızı import ediyoruz.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;MongoClient sınıfına parametre olarak siteden kopyaladığımız bağlantıyı veriyoruz ve myclient adında bir nesne oluşturuyoruz.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;myclient = MongoClient("mongodb+srv://erkamesen:&amp;lt;yourpassword&amp;gt;@cluster1.dumyfbl.mongodb.net/?retryWrites=true&amp;amp;w=majority") #python ile bağlama
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;myclient["veritabanıAdı"] ile clodumuzuda veritabanını oluşturuyoruz ve db adında bir değişkene atıyoruz. &lt;br&gt;&lt;br&gt;
db["collectionAdı"] ile bir collection oluşturarak bunu new_collection adında bir değişkene atıyoruz ve collection ımızı başarı ile oluşturduk.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db = myclient["veritabanıAdı"] #Veritabanı oluşturma
new_collection = db["collectionAdı"] #collection oluşturma veya bağlanma
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Insert(Veri Ekleme) Sorgusu
&lt;/h2&gt;

&lt;h3&gt;
  
  
  insert_one()
&lt;/h3&gt;

&lt;p&gt;Bir kayıdı yani MongoDB'de çağrıldığı şekliyle bir dökümanı bir collection a eklemek için insert_one() yöntemini kullanırız.&lt;br&gt;
insert_one() yönteminin ilk parametresi, eklemek istediğiniz belgedeki her alanın adlarını ve değerlerini içeren bir sözlüktür.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;myclient = MongoClient("mongodb+srv://erkamesen:&amp;lt;yourpassword&amp;gt;@cluster1.dumyfbl.mongodb.net/?retryWrites=true&amp;amp;w=majority") #python ile bağlama
db = myclient["mydatabase"] #Veritabanı oluşturma
new_collection = db["customers"] #collection oluşturma veya bağlanma
--- 
new_data = {"name":"Erkam","City":"Karabük"}
x = new_collection.insert_one(new_data)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yrE1wfN_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/215444999-28c7e38c-f749-497b-9b8a-768c9d79fedb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yrE1wfN_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/215444999-28c7e38c-f749-497b-9b8a-768c9d79fedb.png" alt="Seçim_056" width="880" height="469"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;insert_id&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;print(x.inserted_id)
Result : 63d79461665fd3f1737213b1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  insert_many()
&lt;/h3&gt;

&lt;p&gt;MongoDB'deki bir collection a birden çok döküman eklemek için insert_many() yöntemini kullanırız.&lt;br&gt;
insert_many() yönteminin ilk parametresi, eklemek istediğiniz verileri içeren sözlükleri içeren bir listedir:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mylist = [
  { "name": "Amy", "address": "Apple st 652"},
  { "name": "Hannah", "address": "Mountain 21"},
  { "name": "Michael", "address": "Valley 345"},
  { "name": "Sandy", "address": "Ocean blvd 2"},
  { "name": "Betty", "address": "Green Grass 1"},
  { "name": "Richard", "address": "Sky st 331"},
  { "name": "Susan", "address": "One way 98"},
  { "name": "Vicky", "address": "Yellow Garden 2"},
  { "name": "Ben", "address": "Park Lane 38"},
  { "name": "William", "address": "Central st 954"},
  { "name": "Chuck", "address": "Main Road 989"},
  { "name": "Viola", "address": "Sideway 1633"}
]
new_collection.insert_many(mylist)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Burda her bir row için otomatik bir unique ID verilecek istersek bunu kendimiz de belirtebiliriz.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# ID ye göre ekleme yapma 
new_list_with_id = [
    {"_id":1, "name": "Erkam", "address": "Karabük"},
    {"_id":2, "name": "Ensar", "address": "İstanbul"},
    {"_id":3, "name": "Duygu", "address": "Ankara"},
    {"_id":4, "name": "Enes", "address": "İstanbul"},
    {"_id":5, "name": "Ulaş", "address": "Sakarya"},
    {"_id":6, "name": "Onur", "address": "Isparta"},
    {"_id":7, "name": "Çelik", "address": "Bolu"},

]
new_collection.insert_many(new_list_with_id)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Find(Veri Bulma) Sorgusu
&lt;/h2&gt;

&lt;p&gt;MongoDB'de bir koleksiyondaki verileri bulmak için SQL de ki SELECT ifadesinin yerine MongoDB de find() ve find_one() yöntemlerini kullanırız.&lt;/p&gt;

&lt;h3&gt;
  
  
  find_one()
&lt;/h3&gt;

&lt;p&gt;MongoDB'deki bir koleksiyondan veri seçmek için find_one() yöntemini kullanabiliriz. Bu bize ilk satırda ki kayıdı verecektir.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;x = new_collection.find_one()
print(x)
# {'_id': ObjectId('63d79904c5c7052da8b7bc6e'), 'name': 'Amy', 'address': 'Apple st 652'}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  find()
&lt;/h3&gt;

&lt;p&gt;find() yöntemi, seçimdeki tüm kayıtları bize döndürür.&lt;br&gt;
find() yönteminin ilk parametresi bir sorgu nesnesidir. Bu örnekte, parametre vermeyerek koleksiyondaki tüm kayıtları seçen boş bir sorgu nesnesi kullanıyoruz. Özetle SQL de ki *SELECT komutu için find() methodunun parametresini boş bırakmamız yeterlidir.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for x in new_collection.find():
  print(x) 
 """
{'_id': ObjectId('63d79904c5c7052da8b7bc6e'), 'name': 'Amy', 'address': 'Apple st 652'}
{'_id': ObjectId('63d79904c5c7052da8b7bc6f'), 'name': 'Hannah', 'address': 'Mountain 21'}
{'_id': ObjectId('63d79904c5c7052da8b7bc70'), 'name': 'Michael', 'address': 'Valley 345'}
{'_id': ObjectId('63d79904c5c7052da8b7bc71'), 'name': 'Sandy', 'address': 'Ocean blvd 2'}
{'_id': ObjectId('63d79904c5c7052da8b7bc72'), 'name': 'Betty', 'address': 'Green Grass 1'}
{'_id': ObjectId('63d79904c5c7052da8b7bc73'), 'name': 'Richard', 'address': 'Sky st 331'}
{'_id': ObjectId('63d79904c5c7052da8b7bc74'), 'name': 'Susan', 'address': 'One way 98'}
{'_id': ObjectId('63d79904c5c7052da8b7bc75'), 'name': 'Vicky', 'address': 'Yellow Garden 2'}
{'_id': ObjectId('63d79904c5c7052da8b7bc76'), 'name': 'Ben', 'address': 'Park Lane 38'}
{'_id': ObjectId('63d79904c5c7052da8b7bc77'), 'name': 'William', 'address': 'Central st 954'}
{'_id': ObjectId('63d79904c5c7052da8b7bc78'), 'name': 'Chuck', 'address': 'Main Road 989'}
{'_id': ObjectId('63d79904c5c7052da8b7bc79'), 'name': 'Viola', 'address': 'Sideway 1633'}
{'_id': 1, 'name': 'Erkam', 'address': 'Karabük'}
{'_id': 2, 'name': 'Ensar', 'address': 'İstanbul'}
{'_id': 3, 'name': 'Duygu', 'address': 'Ankara'}
{'_id': 4, 'name': 'Enes', 'address': 'İstanbul'}
{'_id': 5, 'name': 'Ulaş', 'address': 'Sakarya'}
{'_id': 6, 'name': 'Onur', 'address': 'Isparta'}
{'_id': 7, 'name': 'Çelik', 'address': 'Bolu'}"""
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  find() ile Belirli Verileri Çekme
&lt;/h3&gt;

&lt;p&gt;find() yönteminin ikinci parametresi, sonuca hangi alanların dahil edileceğini açıklayan bir nesnedir.&lt;br&gt;
Bu parametre isteğe bağlıdır ve atlanırsa tüm alanlar sonuca dahil edilir.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# id yi getirme ismi ve adresi getir
for x in new_collection.find({},{ "_id": 0, "name": 1, "address":1}):
  print(x) 
"""
{'name': 'Amy', 'address': 'Apple st 652'}
{'name': 'Hannah', 'address': 'Mountain 21'}
{'name': 'Michael', 'address': 'Valley 345'}
{'name': 'Sandy', 'address': 'Ocean blvd 2'}
{'name': 'Betty', 'address': 'Green Grass 1'}
"""
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Sadece isimleri getir
for x in new_collection.find({},{ "_id": 0, "name": 1}):
  print(x) 
"""
# Sadece isimleri getir
for x in new_collection.find({},{ "_id": 0, "name": 1}):
  print(x) 
# Sadece isimleri getir
for x in new_collection.find({},{ "_id": 0, "name": 1}):
  print(x) 
{'name': 'Amy'}
{'name': 'Hannah'}
{'name': 'Michael'}
{'name': 'Sandy'}
{'name': 'Betty'}
"""
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Query(Filtreleme) Sorguları
&lt;/h2&gt;

&lt;p&gt;Bir koleksiyondaki belgeleri bulurken, bir sorgu nesnesi kullanarak sonuca filtre uygulayabilirsiniz.&lt;br&gt;
find() yönteminin ilk bağımsız değişkeni bir sorgu nesnesidir ve aramayı sınırlandırmak için kullanılır.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;myquery = { "address": "İstanbul" }
mydoc = new_collection.find(myquery)

for x in mydoc:
  print(x) 
"""
{'_id': 2, 'name': 'Ensar', 'address': 'İstanbul'}
{'_id': 4, 'name': 'Enes', 'address': 'İstanbul'}
"""
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Advanced Query
&lt;/h3&gt;

&lt;p&gt;Daha detaylı sorgular için not ortalamalarının tutulduğu bir collection açalım.&lt;br&gt;
ve içerisine liste şeklinde notlarımızı yükleyelim&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mydb = db["notlar"]
notlar = [{"Adı":"Ali","Ortalama":63},
          {"Adı":"Ayşe","Ortalama":82},
          {"Adı":"Mehmet","Ortalama":18},
          {"Adı":"Duygu","Ortalama":41},
          {"Adı":"Buse","Ortalama":72},
          {"Adı":"Orhan","Ortalama":26},
          {"Adı":"Kerim","Ortalama":65},
          {"Adı":"Mustafa","Ortalama":23},
          {"Adı":"Şule","Ortalama":75},
          {"Adı":"Baran","Ortalama":91},
          {"Adı":"Kaan","Ortalama":74},
          {"Adı":"Osman","Ortalama":62},
          {"Adı":"Banu","Ortalama":84},
          {"Adı":"Burhan","Ortalama":36},
          {"Adı":"Oğuz","Ortalama":63},
          {"Adı":"Ali","Ortalama":75}
         ]
mydb.insert_many(notlar)
# &amp;lt;pymongo.results.InsertManyResult at 0x7f23655cff10&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pRh_UhjZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/215504853-f3ea065a-b9be-4cf7-bd1e-5fcefc0e8382.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pRh_UhjZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/120065120/215504853-f3ea065a-b9be-4cf7-bd1e-5fcefc0e8382.png" alt="Seçim_057" width="880" height="628"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Şimdi 50 ve üzeri not alanların dersi geçtiğini baz alalım ve buna göre greater than, less than i kodlarımıza ekleyelim.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$gt = greater than "&amp;gt;"
$gte = greater than equal "&amp;gt;="
$lt = less than "&amp;lt;"
$lte = less than equal "&amp;lt;="
$ne = not equal "!="
$in = Karşısına gelen liste içindeki value ları getirir { field: { $in: [&amp;lt;value1&amp;gt;, &amp;lt;value2&amp;gt;, ... &amp;lt;valueN&amp;gt; ] } }
$nin = Karşısına gelen liste içindeki value lar haricini getirir { field: { $nin: [&amp;lt;value1&amp;gt;, &amp;lt;value2&amp;gt;, ... &amp;lt;valueN&amp;gt; ] } }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;DERSİ GEÇENLERİN İSİMLERİ:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for x in mydb.find({"Ortalama": { "$gte": 50 }},{"_id":0, "Adı":1}):
    print(x)
"""
{'Adı': 'Ali'}
{'Adı': 'Ayşe'}
{'Adı': 'Buse'}
{'Adı': 'Kerim'}
{'Adı': 'Şule'}
{'Adı': 'Baran'}
{'Adı': 'Kaan'}
{'Adı': 'Osman'}
{'Adı': 'Banu'}
"""   
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;DERSTEN KALANLARI ISIMLERİ VE NOTLARI&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for x in mydb.find({"Ortalama": { "$lt": 50 }},{"_id":0}):
    print(x)
"""
{'Adı': 'Mehmet', 'Ortalama': 18}
{'Adı': 'Duygu', 'Ortalama': 41}
{'Adı': 'Orhan', 'Ortalama': 26}
{'Adı': 'Mustafa', 'Ortalama': 23}
{'Adı': 'Burhan', 'Ortalama': 36}
"""
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Sort(Sıralama) Sorgusu
&lt;/h2&gt;

&lt;p&gt;Sonucu artan veya azalan düzende sıralamak için sort() yöntemini kullanırız.&lt;br&gt;
sort() yöntemi, "fieldname" için bir parametre ve "yön" için bir parametre alır (artan yön, varsayılan yöndür).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sort("name", 1) #ascending ( Artan Yön )
sort("name", -1) #descending ( Azalan Yön )
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ortalamalar için ARTAN YÖN&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Ortalamalar için ARTAN YÖN
for x in mydb.find({},{"_id":0}).sort("Ortalama"):
    print(x)
"""
{'Adı': 'Mehmet', 'Ortalama': 18}
{'Adı': 'Mustafa', 'Ortalama': 23}
{'Adı': 'Orhan', 'Ortalama': 26}
{'Adı': 'Burhan', 'Ortalama': 36}
{'Adı': 'Duygu', 'Ortalama': 41}
{'Adı': 'Osman', 'Ortalama': 62}
{'Adı': 'Ali', 'Ortalama': 63}
{'Adı': 'Kerim', 'Ortalama': 65}
{'Adı': 'Buse', 'Ortalama': 72}
{'Adı': 'Kaan', 'Ortalama': 74}
{'Adı': 'Şule', 'Ortalama': 75}
{'Adı': 'Ayşe', 'Ortalama': 82}
{'Adı': 'Banu', 'Ortalama': 84}
{'Adı': 'Baran', 'Ortalama': 91}
"""
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ortalamalar için AZALAN YÖN&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for x in mydb.find({},{"_id":0}).sort("Ortalama", -1):
    print(x)
"""
{'Adı': 'Baran', 'Ortalama': 91}
{'Adı': 'Banu', 'Ortalama': 84}
{'Adı': 'Ayşe', 'Ortalama': 82}
{'Adı': 'Şule', 'Ortalama': 75}
{'Adı': 'Kaan', 'Ortalama': 74}
{'Adı': 'Buse', 'Ortalama': 72}
{'Adı': 'Kerim', 'Ortalama': 65}
{'Adı': 'Ali', 'Ortalama': 63}
{'Adı': 'Osman', 'Ortalama': 62}
{'Adı': 'Duygu', 'Ortalama': 41}
{'Adı': 'Burhan', 'Ortalama': 36}
{'Adı': 'Orhan', 'Ortalama': 26}
{'Adı': 'Mustafa', 'Ortalama': 23}
{'Adı': 'Mehmet', 'Ortalama': 18}
"""
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  and - or Sorguları
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; and: find({$and:[{sorgu1:beklenen1},{sorgu2:beklenen2}]})
 or: find({$or:[{sorgu1:beklenen1},{sorgu2:beklenen2}]})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  and
&lt;/h3&gt;

&lt;p&gt;liste içindeki sorguların hepsinin doğru olduğu kayıdı getirir.&lt;/p&gt;

&lt;p&gt;ORTALAMASI 63 olanları getir&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for x in mydb.find({"Ortalama":63},{"_id":0}):
    print(x)
"""
{'Adı': 'Ali', 'Ortalama': 63}
{'Adı': 'Oğuz', 'Ortalama': 63}
"""
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ORTALAMASI 63 ve ADI ALİ olanları getir&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for x in mydb.find({"$and":[{"Ortalama":63},{"Adı":"Ali"}]},{"_id":0}):
    print(x)
# {'Adı': 'Ali', 'Ortalama': 63}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  or
&lt;/h3&gt;

&lt;p&gt;liste içindeki sorguların hepsini getirir.&lt;/p&gt;

&lt;p&gt;ORTALAMASI 63 yada ADI ALİ olanları getir&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for x in mydb.find({"$or":[{"Ortalama":63},{"Adı":"Ali"}]},{"_id":0}):
    print(x)
"""
{'Adı': 'Ali', 'Ortalama': 63}
{'Adı': 'Oğuz', 'Ortalama': 63}
{'Adı': 'Ali', 'Ortalama': 75}
"""
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Update(Güncelleme) Sorguları
&lt;/h2&gt;

&lt;h3&gt;
  
  
  update_one()
&lt;/h3&gt;

&lt;p&gt;Bir kaydı veya MongoDB tabiri ile dökümanı update_one() yöntemini kullanarak güncelleyebilirsiniz.&lt;br&gt;
update_one() yönteminin ilk parametresi, hangi belgenin güncelleneceğini tanımlayan bir sorgu nesnesidir.&lt;br&gt;
İkinci parametre, belgenin yeni değerlerini tanımlayan bir nesnedir.&lt;br&gt;
Not: Sorgu birden fazla kayıt bulursa, yalnızca ilk oluşum güncellenir.&lt;/p&gt;

&lt;p&gt;my_query = {"eski kayıt":"eski deger"}&lt;br&gt;
new_values = {"$set":{"eski kayıt":"yeni deger"}}&lt;br&gt;
update_one(my_query, new_values)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Banu Ortalama 84 geldi. şimdi bunun notunu 100 ile güncelleyelim.
my_query = {"Ortalama":84}
new_values = {"$set":{"Ortalama":100}}
mydb.update_one(my_query, new_values)
# 100 olarak değiştirdik kontrol edelim
mydb.find_one({"Ortalama":100})

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  update_many()
&lt;/h3&gt;

&lt;p&gt;uygulama aşamasında update_one() dan hiç bir farkı yok.&lt;br&gt;
Sorgunun koşullarını karşılayan tüm dökümanları güncellemek için update_many() yöntemini kullanırız.&lt;/p&gt;

&lt;p&gt;AF GELDİ ! ORTALAMASI 50 den AZ OLAN HERKESİ GEÇİRİYORUZ&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my_query = {"Ortalama":{"$lt":50}}
new_values = {"$set":{"Ortalama":50}}
mydb.update_many(my_query, new_values)
for x in mydb.find({},{"_id":0}):
    print(x)
"""
{'Adı': 'Ali', 'Ortalama': 63}
{'Adı': 'Ayşe', 'Ortalama': 82}
{'Adı': 'Mehmet', 'Ortalama': 50}
{'Adı': 'Duygu', 'Ortalama': 50}
{'Adı': 'Buse', 'Ortalama': 72}
{'Adı': 'Orhan', 'Ortalama': 50}
{'Adı': 'Kerim', 'Ortalama': 65}
{'Adı': 'Mustafa', 'Ortalama': 50}
{'Adı': 'Şule', 'Ortalama': 75}
{'Adı': 'Baran', 'Ortalama': 91}
{'Adı': 'Kaan', 'Ortalama': 74}
{'Adı': 'Osman', 'Ortalama': 62}
{'Adı': 'Banu', 'Ortalama': 100}
{'Adı': 'Burhan', 'Ortalama': 50}
{'Adı': 'Oğuz', 'Ortalama': 63}
{'Adı': 'Ali', 'Ortalama': 75}
"""
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;update_one() karşılayan ilk kayıdı değiştirir. update_many() ise tüm karşılayan kayıtları.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Limit Sorguları
&lt;/h2&gt;

&lt;p&gt;Sonucu sınırlamak için limit() yöntemini kullanırız.&lt;br&gt;
limit() yönteminin alacağı parametre ile kaç döküman döndüreceğini belirleriz.&lt;/p&gt;

&lt;p&gt;HEPSİ&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for x in mydb.find():
    print(x)
"""
{'_id': ObjectId('63d7dba343737eb5fa87bfb3'), 'Adı': 'Ali', 'Ortalama': 63}
{'_id': ObjectId('63d7dba343737eb5fa87bfb4'), 'Adı': 'Ayşe', 'Ortalama': 82}
{'_id': ObjectId('63d7dba343737eb5fa87bfb5'), 'Adı': 'Mehmet', 'Ortalama': 50}
{'_id': ObjectId('63d7dba343737eb5fa87bfb6'), 'Adı': 'Duygu', 'Ortalama': 50}
{'_id': ObjectId('63d7dba343737eb5fa87bfb7'), 'Adı': 'Buse', 'Ortalama': 72}
{'_id': ObjectId('63d7dba343737eb5fa87bfb8'), 'Adı': 'Orhan', 'Ortalama': 50}
{'_id': ObjectId('63d7dba343737eb5fa87bfb9'), 'Adı': 'Kerim', 'Ortalama': 65}
{'_id': ObjectId('63d7dba343737eb5fa87bfba'), 'Adı': 'Mustafa', 'Ortalama': 50}
{'_id': ObjectId('63d7dba343737eb5fa87bfbb'), 'Adı': 'Şule', 'Ortalama': 75}
{'_id': ObjectId('63d7dba343737eb5fa87bfbc'), 'Adı': 'Baran', 'Ortalama': 91}
{'_id': ObjectId('63d7dba343737eb5fa87bfbd'), 'Adı': 'Kaan', 'Ortalama': 74}
{'_id': ObjectId('63d7dba343737eb5fa87bfbe'), 'Adı': 'Osman', 'Ortalama': 62}
{'_id': ObjectId('63d7dba343737eb5fa87bfbf'), 'Adı': 'Banu', 'Ortalama': 100}
{'_id': ObjectId('63d7dba343737eb5fa87bfc0'), 'Adı': 'Burhan', 'Ortalama': 50}
{'_id': ObjectId('63d7dba343737eb5fa87bfc1'), 'Adı': 'Oğuz', 'Ortalama': 63}
{'_id': ObjectId('63d7dba343737eb5fa87bfc2'), 'Adı': 'Ali', 'Ortalama': 75}
"""
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;ilk 5 i&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for x in mydb.find().limit(5):
    print(x)
"""
{'_id': ObjectId('63d7dba343737eb5fa87bfb3'), 'Adı': 'Ali', 'Ortalama': 63}
{'_id': ObjectId('63d7dba343737eb5fa87bfb4'), 'Adı': 'Ayşe', 'Ortalama': 82}
{'_id': ObjectId('63d7dba343737eb5fa87bfb5'), 'Adı': 'Mehmet', 'Ortalama': 50}
{'_id': ObjectId('63d7dba343737eb5fa87bfb6'), 'Adı': 'Duygu', 'Ortalama': 50}
{'_id': ObjectId('63d7dba343737eb5fa87bfb7'), 'Adı': 'Buse', 'Ortalama': 72}
"""
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Delete Sorguları
&lt;/h2&gt;

&lt;h3&gt;
  
  
  delete_one()
&lt;/h3&gt;

&lt;p&gt;Bir belgeyi silmek için, delete_one() yöntemini kullanırız.&lt;br&gt;
delete_one() yönteminin ilk parametresi, hangi belgenin silineceğini tanımlayan bir sorgu nesnesidir.&lt;/p&gt;

&lt;p&gt;Not: Sorgu birden fazla belge bulursa yalnızca ilk geçtiği yer silinir.&lt;br&gt;
İsmi ayşe olan biri var mı diye kontrol ediyoruz&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for x in mydb.find({"Adı":"Ayşe"}):
    print(x)
"""
{'_id': ObjectId('63d7dba343737eb5fa87bfb4'), 'Adı': 'Ayşe', 'Ortalama': 82}
"""
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;1 adet Ayşe var şimdi biz bunu silmek istiyoruz.Öncelikle kod kalabalığı olmasın diye kaydımızı alıp değişkene atayalım.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;myquery = {"Adı":"Ayşe"}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Şimdi delete_one() ile silebiliriz.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mydb.delete_one(myquery)
# &amp;lt;pymongo.results.DeleteResult at 0x7f23655ced70&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kontrol edelim.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mydb.find_one({"Adı":"Ayşe"})
# None
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  delete_many()
&lt;/h3&gt;

&lt;p&gt;Birden fazla dökümanı silmek için, delete_many() yöntemini kullanın.&lt;/p&gt;

&lt;p&gt;NOTU 50 OLANLARI SİLİYORUZ.ÖNCE KONTROL EDELİM&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for x in mydb.find({"Ortalama":50},{"_id":0}):
    print(x)
"""
{'Adı': 'Mehmet', 'Ortalama': 50}
{'Adı': 'Duygu', 'Ortalama': 50}
{'Adı': 'Orhan', 'Ortalama': 50}
{'Adı': 'Mustafa', 'Ortalama': 50}
{'Adı': 'Burhan', 'Ortalama': 50}
"""
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Silinecek kayıdımızı değişkene atıyoruz.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;myquery = {"Ortalama":50}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Silme işlemini gerçekleştiriyoruz.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mydb.delete_many(myquery)
# &amp;lt;pymongo.results.DeleteResult at 0x7f23655ce800&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tekrar kontrol edelim&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;for x in mydb.find({"Ortalama":50},{"_id":0}):
    print(x)
# None
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>python</category>
      <category>programming</category>
      <category>mongodb</category>
      <category>nosql</category>
    </item>
    <item>
      <title>Quit Tracker</title>
      <dc:creator>Erkam Esen</dc:creator>
      <pubDate>Tue, 14 Mar 2023 22:33:03 +0000</pubDate>
      <link>https://dev.to/erkamesen/quit-tracker-24bc</link>
      <guid>https://dev.to/erkamesen/quit-tracker-24bc</guid>
      <description>&lt;p&gt;It is very important to hold on to something for motivation after quitting smoking, and contrary to popular belief, quitting smoking is pretty easy if you have a determined mindset.&lt;br&gt;
With this application, you will be able to follow the money and life you do not spend without smoking and you'll be more motivated as you see the steps to success. Good luck everyone 🙏🙏&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DImid8pp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n384llx7a648ek8hltut.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DImid8pp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n384llx7a648ek8hltut.png" alt="Stats1" width="880" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--W2ddcrAA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xvrmp1qzncftj6zutg5m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--W2ddcrAA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xvrmp1qzncftj6zutg5m.png" alt="Stats2" width="880" height="222"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>python</category>
      <category>flask</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
