Django ile veritabanları arasında veri aktarma (sqlite to mysql migration)

Django ile başladığım projede veritabanını değiştirme aşamasına geldiğim zaman sqlite veritabanına bir çok veri girildiğini ve bunlarında aktarılması gerektiğini fark ettim. İnternette bir çok uygulama ile bu yapılabilir. Fakat ben bunu django ile yapmayı tercih ettim.

Sqlite veritabanından mysql veritabanına çevirme sürecinde ki deneyimlerimi adım adım aktarmak istiyorum.

İlk olarak sqlite veritabanı yapımızı mysqle aktarmak lazım. Bu süreçten önce ben yeni tablo ve sütun açma işlemlerinde django migrate işlemini kullanmıştım. Ondan dolayı kolay oldu.

Django ile mysql bağlantısı için pymysql kütüphanesini kullandım.

pip3 install pymysql 

komutu ile yükledim sonrasında settings.py içerisi

import pymysql
pymysql.install_as_MySQLdb()

satırını ekleyerek bağlantı için ilk aşamayı tamamladık. Bu arada pymysql kütüphanesi python ile yazıldığından dolayı biraz daha yavaş çalışıyor fakat MacOsX’te diğer kütüphanelerin derlenmesi sorunlu olduğundan bunu tercih ettim.

DATABASES = {
    'old': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    },

    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'localhost',
        'USER': 'root',
        'PASSWORD': '',
        'HOST': 'localhost',  # Or an IP Address that your DB is hosted on
        'PORT': '3306'
    }
}

databases parametresini üstte ki gibi yaptım. Komut satırından

python3 manage.py migrate

otomatik olarak mysql veritabanını düzenledi.

Mysql veritabanına kayıtlar atılmadan önce veritabanında ki foreign key’leri silmemiz lazım. Bunun nedeni sqlite veritabanında ki verilerin aktarılması sırasında hata oluşacağı için.

SELECT CONCAT(‘ALTER TABLE ‘, TABLE_NAME, ‘ DROP FOREIGN KEY ‘, CONSTRAINT_NAME, ‘;’)
FROM information_schema.key_column_usage
WHERE CONSTRAINT_SCHEMA = ‘DB’
AND TABLE_NAME IN (‘GEREKLI_OLAN_TABLOLAR’)
AND REFERENCED_TABLE_NAME IS NOT NULL;

komutu sonucunda oluşan satırları çalıştırınca bütün foreign key’ler silinecektir.

Şu ana kadar ki bütün aşamalar mutfakta ki hazırlık aşamasıydı. Son aşama olarak verileri aktarma kaldı.

def export(table_name):
    if table_name is not None:
        datas = table_name.objects.using('old').all()
        for item in datas:
            item.save(using="default")
export(CustomerEntity)
export(ExceptionEntity)
export(ProductEntity)
export(ProductTagEntity)
export(UserEntity)

komutlarını django projesinin içerisinde çalıştırdığınızda sqlite verilerinizi mysql’e aktaracaktır.

Üst kısımda anlatmış olduğum aşamayı diğer veritabanları arasında aktarımda da kullanabilirsiniz. Benim sorunumda aktarım sqlite ile mysql arasında olacağından ona göre anlattım.

Umarım faydalı olmuştur.

Facebook Comments

Devamını Oku

C++ ile loadmodule 126 hatası

Üzerinde çalıştığım projeyi farklı bilgisayarda kullanmak istediğimizde dll yüklenemiyor hatası ile karşılaştık. Hatayı anlamak ve bağımlılıkları tespit edip sorunu çözmek gerçekten de zamanımızı aldı. Kısaca izlediğimiz yolu anlatayım.

dependencywalker.com sitesinden uygulamayı indirip kurulumunu yaptık. Sonrasında hata ile karşılaştığımız dll dosyasını program ile açtığımız zaman bağımlılık olan dll listesini görüntüleyebiliyoruz.

Bizim yaşadığımız sorunda VCRUNTIME140 ile MSVCP dll dosyalarının eksik olmasından dolayıydı ve onları dll’in yanına kopyaladığımız zaman hatayı giderdik.

Bu tarz hatalar için bu uygulama oldukça kullanışlı ve hızlı çözüm üretmeye yardımcı oluyor.

Facebook Comments

Devamını Oku

Yeni işim ve Opencascade Kurulumu

Daha önceden bir çok kere 3D ile ilgili çalışmalar yapmaya niyetlendim ama bir türlü sonuna kadar ilerleme şansım olmamıştı. Bazen yeterli zamanı ayıramadım bazende hevesim kaçtı. Ama yeni başladığım iş tam olarak bu konuda olunca öğrenmekte zorunluluk haline geldi. Adeko’da üç boyutlu mutfak tasarım ile ilgili projede çalışmaya başladım. Önceden çalıştığım işlerden ve yaptığım projelerden daha farklı ve eğlenceli. Kendine göre zorlukları ve kolaylıkları tabikide var. Şirket sahibi Süha Aktan her konuda oldukça anlayışlı ve bilgili, sıkıştığınız yada yardıma ihtiyaç duyduğunuz her an gelip yardımcı oluyor, bilgisini sınırsızca paylaşıyor. Bu konuda ki bilgisi ve tecrübesi gerçektende muazzam denilebilir.

Şu anda üzerinde çalıştığım proje katı modelleme(solid modelling) konusunda farklı bir firma ile çalışmakta ve bunu sadece belli bir oranda kullanmaktaydı. Proje üzerinde birkaç düzenleme yaptığım sırada katı modelleme konusunda ihtiyaçlar ortaya çıktı ve bu doğrultuda çözüm arayışları içerisine girdik.

Araştırmalar sonucunda işimize geometros ve opencascade ürünlerinin çözün olacaığını konusunda hem fikir olduk ve bu iki ürün arasında seçim yapmamız gerekti. Her iki ürünü test ettiğim hangisinin ileriye yönelik olarak işimize yarayacağını ortaklaşa bir karar aldık ve yolumuza Opencascade ile devam ettik.

Opencascade öncelikle açık kaynak kodlu ve bir çok soruna çözümler sunan büyük ve kullanışlı bir kütüphane. İçerisinde ihtiyacınız olacak herşey mevcut. Katı modelleme ile yapmanız gereken herşey önceden düşünülmüş ve eklenmiş. Tabi benim önceden katı modelleme konusunda bir tecrübem olmamasından dolayı yapıyı anlamak ve birşeyler yapmak biraz zaman aldığı doğru.

Öncelikle şunu belirteyim Opencascade ürününü normalde Windows üzerinde  kullanıyoruz fakat ben kişisel olarak Mac kullanmayı tercih ettiğimden dolayı kurulumu Mac Os X’e göre anlatıyorum.

Ürünü http://www.opencascade.com/content/latest-release adresinden son sürümünü indirebilirsiniz. Bu dökümanı yazarken son versiyon 6.9.1.

Kurulunu WOK ile de yapabilirsiniz ama ben onu kullanmadım.

Kodlarımızı kendimiz derleyeceğiz ve bunun için iki farklı yol var. İlk yolu kullanmanızı önermiyorum, çünkü hem daha zahmetli hemde sorun çıkma riski daha yüksek ama genede nasıl olduğunu anlatmakta fayda var.

1. Yol

Dosyaları açtığımız klasörün içerisinde xcode.sh dosyası var. Komut satırından

./xcode.sh

komutunu çalıştırıp projemizin xcode iel çalışmasını sağlıyoruz. İlk olarak FoundationClasses içerisinde TKernel derlemeyi deniyoruz. Muhtemelen
ld: library not found for -ltbb
hatasını alacaksınız. Bu kısımda işler biraz zor. Her projeye için tek tek girip düzenleme yapmak zorundayız. Projeyi seçip Build Phases altında Link Binary With Libraries kısmında bulunan libtbb.dylib ve libtbbmalloc.dylib silip hemen alt kısmında ki artı tuşuna tıklayın ve gelen ekranda libdl.tbd seçin. Bu işlemi bütün projeler için tekrarlayın. Biraz zaman alıyor ama işe yarıyor. Bütün projeleri derlemek için sol üst kısımdan DRAWEXE yi seçip derlediğiniz zaman bütün projeler derlenmiş olacaktır. Eğer bu kısımda sorun ile karşılaşırsanız bana ulaşabilirsiniz. Şu ana kadar anlattıklarım tam olarak çalışmaya bilir. Ondan dolayı uzun yol ile çalıştırmayı denemenizi tavsiye ediyorum.

2.Yol
Uzun yoldan kurulum için bilgisayarınıza CMAKE kurmanı gerekiyor. https://cmake.org adresinden onuda indirebilirsiniz.

Cmake kurulduktan ve opencascade bir klasöre açıldıktan sonra cmake uygulamasını açıyoruz. Açılan klasörün içerisine cmake adında bir klasör oluşturdum. Cmake uygulaması üzerinde ki dizin bilgisini aşağıda ki gibi ayarladım.

Where is the source code : /Users/erhanbaris/Downloads/opencascade-6.9.1
Where to build the binaries : /Users/erhanbaris/Downloads/opencascade-6.9.1/cmake

Sol alt kısımda ki configure butonuna tıklıyoruz ve done butonuna basıyoruz. Alt kısımda bir kaçtane hata almış olmanız gerekiyor. TCL, TK ve FREETYPE yok diyecektir. Internetten freetype indirip kuruyoruz. Ben kaynak ile kurulumu yaptım. TCL ve TK ile işimiz yok. Onlar deneme yapmak için kullanılıyor. Onları kaldırmak için BUILD_draw seçimini kaldırıyoruz. Sonra INSTALL_DIR dizini seçiyoruz. Buraya derlenmiş olan dosyalarımız konulacak. Generate tuşuna basında hata almadan dosya oluşturma işlemini tamamlıyoruz. Önceden oluşturduğumuz CMAKE klasörünün içerisinde OCCT.xcodeproj isminde ki dosyayı açıyoruz ve Xcode ALL_BUILD seçeneğinde projeyi derliyoruz.

Bilgisayarınızın özelliklerine göre bu işlemin süresi değişebilir fakat 10-15 dakika sürecektir. En azından benim Mac Book Pro’da o kadar sürüyor :)

Bütün bu işlemler bittiği zaman cmake klasörümüzün içerisinde out isminde klasörün içerisine derlenmiş olarak dylib dosyalarımız oluşmuş olacak.

Daha sonradan örnek bir çizim ve gösterimi konusunda da bir yazı yazmayı planlıyorum ama vaktim olur mu bilmiyorum.

Umarım faydalı olmuştur.

Facebook Comments

Devamını Oku

Django, AngularJS, Ajax

Bir fikir kapsamında Django Web Framework ile geliştirmeye yapmaya başladım. Daha önceden Python ile herhangibir geliştirme yapmadığımdan dolayı öncelikle Python öğrenmem ondan sonrada Django öğrenmem gerekti. Doğruyu söylemek gerekirse ilk başlarda oldukça itici geldi. Ama bir süre kullandıktan sonra hızlı ve kolay geliştirme ortamı ve içerisinde gelen özellikleri hoşuma gitti.

Konu web olunca benim için artık vazgeçilmez olan AngularJS kullanmak isteiğimde bazı sıkıntılar yaşamaya başladım. Öncelikli olarak binding kısımları çalışmıyordu. Ne yaptıysam çalışmadı. Kısa bir araştırma sonucunda html içerisinde veri gösteriminde kullandığım süslü parantezlerin template kısmında binding için kullanıldığını öğrendim. Angular kısmında bu tarz şeyler için bazı ayarlamalar yapılabiliyor.

Daha sonra verileri POST etme aşamasında csrf güvenlik hatası almaya başladım. csrf hatası için template ve AngularJS kısmında düzenlemeler yapmak zorunda kaldım. Tabi bunu decorator(attribute) ilede yapmak mümkün ama bunu yapmak güvenliği bir nebze bile olsa azaltacağından dolayı AngularJS tarafında çözüm bulmak istedim. Bu arada template kısmında {% csrf_token %} komutunu kullanmamız şart.

Son olarak Ajax ile gönderdiğim verileri okumakta sorun yaşadım. Sunucu tarafında gelen istediğin Ajax mı yoksa normal bir istek mi olduğunu request.is_ajax() ile sorguladığım zaman sürekli olarak False yanıtını aldım. Tabi bunun içinde AngularJS kısmında bir çözüm mevcut.

Sonuç olarak henüz projenin başındayım. İlerleyen süreçte daha ne gibi sürprizler ile karşılaşacağımı bilmiyorum ama ilginç olanları burada yazmaya niyetliyim. Bu arada AngularJS kısmında kullandığım düzenlemeler aşağıda mevcut. Umarım sizede bir faydası dokunur.

 

angular.module('ProejectApp', ['ngRoute', 'ngCookies']
.config(['$httpProvider', '$interpolateProvider', function ($httpProvider, $interpolateProvider) {

    /* template içerisinde bind işlemini yapmak için {$ BunuEkranaBas $} */
    $interpolateProvider.startSymbol('{$');
    $interpolateProvider.endSymbol('$}');

    
    /* csrf çerezi için gerekli olan kodumuz */
    $httpProvider.defaults.xsrfCookieName = 'csrftoken';
    $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
    
    /* Sunucu tarafında Ajax sorgunu tanımlamak ve veriyi okumak için kullandığım kod */
    $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
    $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
}])
Facebook Comments

Devamını Oku

Stres, Koşuşturmaca, Kitap ve Kahve

Bazen tek gerekli olan sıcak bir kahve ve bir kitap oluyor. Hayatın karmaşası koşuşturmacası ve yorgunluğu arasında oturup birşeyler okumak, düşünmek ve kendin ile olabilmek en büyük dinlenme ve keyif oluyor.

Herşey oldukça hızlı ve aceleci olarak değişiyor. Yeni binalar bir kaç ay içerisinde yapılıyor, yeni yollar yapılıyor, yeni projeler oluşturuluyor ve yeni insanlar tanıyor özümsüyoruz ama aynı zamanda bir öncekini bitirip yitiriyoruz. Sürekli devam eden bir döngü ve süreklilik var. Sanki başlamak için bitiyor ve bitmek için başlıyor hepsi. Bu koşuşturmaca ve stres altında bazen herşeyden uzaklaşmak ve tabir yerinde ise kafa dinlemek en büyük huzur kaynağı oluyor.

Uzun süredir üzerimde hissettiğim o karşı konulmaz bunalmışlık ve sıkıntıların sonrasında evde tek kaldığım bir vakitte yeni aldığım kitabı okumaya başlayıp bir yandan da kahvemi yudumlamak o kadar büyük bir haz ve keyif verdi ki bunu kelimelere döküp hayatımda bir hatıra olarak saklamak istedim.

Zambian teknoloji çağı. Zaman hızlı olma ve sürekli gelişme çağı. Artık birşeyleri öğrenememe yada bilgi bulamama zamanı değil. Birşeyi bilmemek ve öğrenmemek çok büyük bir lüks ve suç oldu. Çünkü bilgi dağları heryerde ve kolaylıkla erişilebilir durumda. Hangi bilginin öğrenileceği ve nereden ne şekilde öğrenileceği asıl sorun olmuş durumda. Bilgiyi öğrenmeye zaman ayırmak yerine bilginin nereden öğrenileceğini araştırmak daha çok zaman alır oldu. Bu da sürekli olarak koşuşturmacaya ve yetiştirmek, yapmak gereken şeylere neden oluyor. Mazeret yok.

Oturup bir yudum kahve ve bir kitap eşliğinde kendimize vakit ayırmak lüks oldu ve bugün ben bu lüksün kıymetini yaşamaya kararlıyım. Hayatınız da lüksümüz olsun ve bu sizin özel bir zamanınız olsun.

 

Not: Kahve=filtre kahve, Kitap=Otostopçunun Galaksinin Rehberi

Facebook Comments

Devamını Oku

Hayatın Kendisi

Hayatta paradan daha değerli birşey varsa o da hayatın kendisi. Yaşadığımız toplumun değer yargıları bizleri maddiyatın herşeyden daha önemli olduğunu ve hayatımızda ki en önemli amacın maddiyat yani para olduğunu dayatıyor. Küçükken gökyüzüne bakıp mutlu olmamız yerine yere bakıp para bulmamız öğretildi. Paranın herşeyi satın alabileceği güncel medya ve yayın organları ile birlikte televizyon programlarında öğretiliyor. Küçücük çocuklar herşeyden önce çok paralarının olmasını istiyor. Şeker mi para mı diye sorsanız herhalde büyük çoğunluğu parayı tercih edecektir.

İnternette yada diğer mecralarda zengin hayat yaşamanın ne kadar güzel ve ayrıcalıklı olduğu anlatılıp özendiriliyoruz. Hayatımızı değerli kılan şeyin paranın kendisi olduğu, paran varsa herşeye sahip olabilirsin ama yoksa mutlu olmak senin hakkın değildir algısı hızla yayılıyor.

Küreselleşme genel olarak ticarete olumlu olarak etkilerde bulunsada aile ve toplum üzerinde yıkıcı etkileri var. İnternetten gördüğü lüksün kendisinde neden olmadığını sorgulamaya başlayıp ailenin içinde bulunduğu maddi durumu yargılayıp, şu anda istediği gibi yaşayamamasının tek sorumlusu olarak ailesini görüyor ve kolay para kazabileceği, isteklerini rahatlıkla yapabileceği seçenekleri düşünüyor. Aile içerisinde ki iletişim eksikliği de bireyler arasında ki iletişimi daha kötüye yöneltip gençlerin mutsuz olmasına neden oluyor.

Her zaman için daha çoğunu ve daha iyisini istiyoruz. Yapımız gereği hep en iyisine layık olduğumu düşünüyoruz. Herşeyin iyisi, yenisi ve kalitelisi bizde olmalı ve her zaman en iyi yerlerde bizler yaşamalıyız. Aslında hayatımızı güzel ve iyi yapan gene bizleriz. Gittiğimiz yerleri güzelleştiren ve yaşabilir kılan gene bizleriz. Olumlu düşenceler hayatımızı daha olumlu etkiler ederken olumsuz olanlar gene bizi sıkıntılara sürüklüyor.

Her canlının hayatı değerlidir. İster bir hayvan olsun istersede insan olsun. Dünyada ki bir canlı bir başka canlı için var olmamıştır ve var olmayacaktır. Her canlı kendi türünün devamı için kendi savaşını veriyor eğer bir aslan avlanıyorsa kendi hayatı için, bir geyikte koşuyorsa kendi hayatı için koşuyor. Bizler ise türümüzün devamı için değil keyfimizin devamı için savaş veriyoruz. Bizler kendi keyfimiz için savaştıkça daha çok suyu kirletip daha çok canlıyı kendimize kürk yapacağız ve daha çok yeri işgal edeceğiz. Ego, kapitalizmi daha vahşi ve daha acımasız yaptıkça aslında bu dünya üzerinde ki yaşam kaynaklarını bitirmemizi ve geriye kullanacak hiçbirşey bırakmayana kadar isteklerimizi yerine getirmemizi istiyor.

Yaşam her zaman bir yolunu bulur, belki de bir gün herşeyi yeniden başlatmamıza neden olur.

Facebook Comments

Devamını Oku

İknanın Psikolojisi – 1.Bölüm Etkinin Silahları

En son yazı yazdığımdan beri oldukça uzun zaman geçmiş. Bu kadar uzun süre neden hiç yazı yazmadım diye düşününce mantıklı bir sebep bulamıyorum. Ama bir yerden tekrar başlamak gerekiyordu. Bunun içinde yeni başladığım ve herkese tavsiye edebileceğim bir kitaptan hoşuma giden bilgileri paylaşarak başlayacağım.

İknanın Psikolojisi isimli Robert B.Cialdini’nin kitabını internet üzerinden bir çok farklı yerde övgü dolu sözlerle tavsiye edildiğini ve bu kitap ile ilgili Youyube’da bir video izleyince okunması gereken kitaplar arasında olduğunu düşündüm ve internetten siparişini verdim. Öncelikle kitap gözüme biraz kalın geldi. Okuması zor ve ağır olacağını düşündüm ama beni yanılttığını söyliyebilirim. İçerisinde ki örneklendirmeler ve anlatım tarzı ile okuyucu kendisine bağlıyor. Birçok ilginç konu ile desteklenen görseller okuyucunun kitapta kalmasını, dikkatinin dağılmasını engelliyor. (daha&helliip;)

Facebook Comments

Devamını Oku

Asp.Net Mvc ve Zamanlanmış Görevler (Scheduled Task)

Öncelikle sorun hakkında biraz konuşalım. Üzerinde çalıştığım projede belli zamanlarda email göndermesi gerekiyor. İlk olarak bir uygulama yapayım diye düşündüm, sunucu üzerinde çalışsın ve zamanlanmış olarak email göndersin. Ondan sonra kapanma riski olduğunu daha doğrusu sunucu yeniden başlatıldığı zaman uygulama çalışmaz diye düşünüp servis olabilir diye düşündüm. Ama bu da kulağı tersten tutmak gibi geldi. Daha basit ve daha pratik bir çözüm olması gerekiyordu. Sonuçta gelişmiş(mature) bir yapı üzerinde çalışıyoruz ve bunun mutlaka farklı bir çözümleri olması lazım değil mi?  (daha&helliip;)

Facebook Comments

Devamını Oku

iPhone ve Tuhaf Kilit Sesi Sorunu

iphone_sesUzun süredir hiç bir yazmadığımı fark ettim ve bu  sabah yaşadığım bir sorunu ve çözüm yöntemini paylaşmanın artık zamanı geldi diye düşündüm ve bu konuya başladım. (Biraz saçma bir giriş oldu farkındayım ama uzun zaman yazmayınca saçmalamakta kolay oluyor)

Yeni aldığım iPhone 5S telefonumu ne yazık ki çok hafif ve ince olmasından dolayı cepte olduğunu unutup bir çok kez düşürdüm. Son düşürdüğümde üst kısmında biraz ezilme oldu. (daha&helliip;)

Facebook Comments

Devamını Oku

Sevgi Üzerine Bir Not

sevgiÇünkü sevmek kendini iyi hissettirir.
Mutlu ettiği için sever severiz.
Konuşması sesi gülüşü kendini iyi hissettirdiği için severiz.
Aslında sevmek kendini sevmekten geliyor.
Sende seviyorsun. Anneni babanı kardeşini arkadaşlarını seviyorsun.
Aslında kendimizi iyi hissettiren herkesi severiz ama hepsi aynı seviyede olmaz. Kimisi daha iyi hissettirir onu daha çok severiz.
Sevgide inişli çıkışlıdır. (daha&helliip;)

Facebook Comments

Devamını Oku