Tuesday, May 22, 2018

Genel Makroekonomi - 3

Sunday, May 20, 2018

Genel Makroekonomi - 2

Wednesday, May 16, 2018

Genel Makroekonomi - 1

Tuesday, May 15, 2018

Phi Korelasyon Katsayısı

Friday, March 30, 2018

Basit, Hızlı Diske Değer Yazma Okuma

Bir Python uygulaması için  basit, hızlı bir şekilde diske yazılabilen, ve istendiği zaman anahtar bazlı, tüm dosyayı hafızaya getirmeden hızlı şekilde okunabilen bir yapıya ihtiyaç vardı. Çözüm için önce Python'un sözlük (dictionary) yapısının diske yazılmasına izin veren çözümler akla geliyor, ki muhakkak o çerçevede pek çok çözüm var. Fakat bir çözüm var ki Python kurulumunun zaten içinde, tek bir dosyaya yönlendirilebilen depolaması mevcut, ve her yazımın diske gitmesini, ve hızlı okunabilmesini sağlıyor.

Bu yazılım sqlite3'ten başkası değil. Eğer az SQL yazmayı göze alırsak, ki bu dili tüm bilişimciler bilir, sqlite3 üstteki tüm ihtiyaçlara cevap verir. Test edelim,

import sqlite3
db = sqlite3.connect('/tmp/mydb.db')
import random

cursor = db.cursor()
cursor.execute('''CREATE TABLE users(id INTEGER PRIMARY KEY, name TEXT,
                  phone TEXT, email TEXT, password TEXT)
       ''')
db.commit()

cursor = db.cursor()
name1 = 'Andres'
phone1 = '3366858' 
email1 = 'user@example.com' + str(random.random())
password1 = '12345'
print (email1)
cursor.execute('''INSERT INTO users(name, phone, email, password)
                  VALUES(?,?,?,?)''', (name1,phone1, email1, password1))
db.commit()

Taban tek bir dosya, hangisi olacağını biz tanımladık, gayet basit.  Üstteki insert komutunu ardı ardına işletelim ve arada sırada /tmp/mydb.db dosyasına bakalım. Bu dosya içinde yaratılan farklı isimleri göreceğiz. Dosya büyüklüğünü kontrol etmek ise yaramayabilir çünkü sqlite taban dosyasını her yazimda degil, belli aralıklarla büyütüyor. 

Arada satır sayısını alttaki ile kontrol edebiliriz,

cursor = db.cursor()
cursor.execute('''SELECT count(*) FROM users''')
print (cursor.fetchone())

Taban iş bitince db.close ile kapatılır. Fakat düzgün kapatılmasa bile commit ile yazılanlar kaybolmayacaktır, yani süreç çökse, tekrar tabana dönsek en son yazdığımız satırı orada bulacağız. 

Bu tüm ihtiyaçları karşılıyor, farklı bir süreçte işleyen büyük bir taban değil, kurulmasına bile gerek yok zaten Python sürümünde var, ayrıca diske yazım var, hızlı okuma (herşeyi hafızaya getirmeden) destekleniyor.