import MySQLdb as sql
import sys
connection = sql.connect('localhost','root','mysqlrootsifresi','eximstats')
cursor = connection.cursor()
cursor.execute("show tables")
result=cursor.fetchall()
for x in result:
cursor.execute("truncate %s" % str(x[0]))
Not : python 2.4 üzerinde geliştirilmiştir. 2.7 de veya 3.x te çalışacğaının garantisini veremeyiz.
* python-mysql eklentsinin yüklenmiş olması gerekmektedir.
Django , kendinizi tekrar etmeme prensiplerine (DRY – Dont repeat yourself) bağlı olarak, işlemleri olabildiğince otomatize etmeye odaklandır.
İlişkisel nesne eşleştirmesi
Veri modellerinizi tamamen Pythonda tanımlayın. Zengin, dinamik veriatabanı erişimi API’si ni ücretsiz olarak alacaksınız
İstediğiniz yerde SQL de yazabilirsiniz tabi ki.
Otomatik Yönetim Arayüzü
Bir WEB projesi yönetim paneli olmadan genelde bir işe yaramıyor. Vaktinizi ve bu işe uğraşma maliyetlerinizi azaltın. ekleme, update etme gibi ihtiyaçlarınız için Django bunu otomatik olarak yapıyor. Kalkışa hazır!
Zarif URL tasarımı
URL’lerinizi herhangi bir sınır olmadan, istediğiniz güzellikte tasarlayın. İstediğiniz kadar esnek olabilirsiniz.
Şablon(template) Sistemi
Django’nun güçlü, geliştirilebilir ve tasarımcı dostu şablon dili ile içeriği , python kodlarını ve tasarımı birbirinden ayırın!
Önbellek sistemi
Memcached veya diğer cache frameworklerinden faydalanın! Elbet bir gün ihtiyacınız olacak çünkü…
Internationalization
Django, çoklu dil uygulamaları için tam destek sağlar. Dil’e özel işlevsellik de sağlar.
Okumaya devam etmek için lütfen Djangonun kendi sitesinden devam ediniz.
]]>http://jira.codehaus.org/browse/JRUBY-5896
Yerel ayarlarınızı İngilizce olarak değiştirdiğinizde Aptana Studio’nun problemsiz çalıştığını göreceksiniz. Ayarlarınızı Windows 7 ‘de değiştirmek için:
try :
do_something
except IOError, (errno, strerror) :
print strerror
gibi bir ifade var ise, burada except kısmında IOError den itibaren silip kodu şu şekilde düzenleyin:
try :
do_something
except :
print "burada bir hata oluştu"
En azından kodunuzda hata almadan (hataları manual olarak loglatabilirsiniz) kodunuz çalışmış olur.
]]>python komutu yazmadan bir python dosyası çalıştırmak için
ilk önce python dosyamızı herhangi bir yere koyalım. Ben aşağıdaki örnek için /usr/local/lib/python2.4/emre/deneme.py yoluna oluşturdum.
daha sonra bir tane de bu dosyayı çağıran dosya yazın aynı yere. İçinde ;
#!/bin/bash python /usr/local/lib/python2.4/emre/deneme
olsun.
En son da
cd /usr/bin ln -s /usr/local/lib/python2.4/emre/deneme deneme
yazıp enter a basın.
daha sonra
chmod 700 deneme
diyin. (root için çalıştırma okuma ve yazma yetkisi vemriş oldunuz.)
Sonra herhangi bir yerde deneme yazıp enter’a bastığınızda, python dosyanızın çalıştığını göreceksiniz.
Diğer yol olarak da python dosyanızın başına
aşağıdaki satırları ekleyin.
#!/usr/bin/env python # -*- coding: utf-8-*-
ilk metoddaki 1. adımı uygulayın ve daha sonra 3. adımda ln -s ile doğrudan python dosyanıza kısayol oluşturun. (2. adımı yapmamış oldunuz.)
]]>No module named PIL diye bir hata veriyorsa aşağıdaki şekilde python image kütüphanesini yükleyiniz. Kütüphaneyi yükleme ile değil de, doğrudan dosyaları kopyalarak sisteminize attıysanız alabilirsiniz. Kütüphanenin olduğu (PIL) dizinde çalışırsanız da hata almayaacksınız, çünkü python default olarak pythonu çalıştırdığınız dizini sys.patch e ekliyor. bu yüzden yine de aşağıdaki gibi yüklemenizde yarar var.
Yüklemek için;
sudo apt-get install python-imaging
apt-get yoksa;
yum install python-imaging
ile yükleyebilirsiniz.
Bir resim dosyası açın. tam yol girmeniz her zaman daha sağlıklı olur (.bmp,.jpg,.png,.gif)
imageFile = "/root/emre/snake.jpg" imageObj = Image.open(imageFile)
Örnek bir resmi şu adresten indirebilirsiniz : snake.jpg
Resmin boyutlarını almak için .size diyoruz. bu bize 2 li bir dizi (array) döndürüyor.
data = imageObj.size print "width(en) %s , height(boy) %s" %(data[0], data[1])
Bunları ileride kullanacaksak ayrı değişkene verebiliriz
imageWidth=data[0] imageHeight=data[1]
Yeni en ve boy degerlerinin disaridan girilmesini isteyelim.
width = float(raw_input("En giriniz"))
height = float(raw_input("Boy giriniz"))
Aşağıda 4 farklı yeniden boyutlandırma algoritması var, 4 ü de resmi verilen boyutlarla yeniden boyutlandırıyor. Deneyip görebilirsiniz (algoritmaların türkçeleri biraz saçma oldu
)
im2 = imageObj.resize((int(width), int(height)), Image.NEAREST) # en yakın komşuluk metodu. im3 = imageObj.resize((int(width), int(height)), Image.BILINEAR) # 2x2 lik ortamda lineer interpolasyon metodu im4 = imageObj.resize((int(width), int(height)), Image.BICUBIC) # 4x4 ortamda Kübik interpolasyon metodu im5 = imageObj.resize((int(width), int(height)), Image.ANTIALIAS) # aşağı ölçeklendirme filtreleme metodu (antialias)
Bu yeniden boyutlandırılmış resimleri çalıştığımız dizine kayıt edebiliriz.
im2.save("NEAREST.jpg")
im3.save("BILINEAR.jpg")
im4.save("BICUBIC.jpg")
im5.save("ANTIALIAS.jpg")
Resmin ilk hali üzerinden doğru ölçeklendirmek için bir resim algoritması aşağıdadır. Bu resmi eğip büzmez mevcut oranları korur, eski resmi girilen en boy oranları şeklindeki bir hayali diktörgenin içine sığdırır. Çarpma bölme ve oran işlemleri için float değerlere ihtiyacımız olduğundan integer olabeilcek verileri float() tan geçirmeyi unutmuyoruz.
if imageWidth>width or imageHeight > height : if imageWidth > imageHeight : finalWidth = width percent = float(width)/float(imageWidth) finalHeight = float(percent) * float(imageHeight) elif imageHeight >= imageWidth : finalHeight = height percent = float(height)/float(imageHeight) finalWidth = float(percent) * float(imageWidth) elif imageWidth < = width and imageHeight < = height : finalWidth = imageWidth finalHeight = imageHeight
Resim objesi resize işleminde integer değer aldığından oluştururken float olan verileri int() ten geçiriyoruz ve resmi kaydediyoruz.
print "yeni boyutlar %s %s" % (finalWidth,finalHeight)
newImage = imageObj.resize((int(finalWidth),int(finalHeight)), Image.NEAREST)
newImage.save("newImage.jpg")
]]>Programın içinde kullanacağınız bir dosya içeriği var diyelim. Ne yaparız normalde, açarız dosyayı okuruz. Bu noktada kapatmaya özel dikkat. Tutarsız bir şekilde ne olduğunu anlamadan başınıza bişeyler gelebilir, başka bir değişken için ya aynı dosyayı okuyamazsınız, ya aynı değişkene başka bişiler yapamazsınız vb..
fileHandler = open("/usr/deneme.log", "r")
content = sqlFileHandler.read()
fileHandler.close()
import MySQLdb as sql
diye import ettiğimiz python mysql kütüphanesinde,
db = sql.connect(.....
dedikten sonra,
c = db.cursor();
diyoruz. Burada istediğimz bir query yi
c.execute('select * from biseybisey where a=3')
diye yazabilirken, DELETE ile ilgili bir query yazdığımızda
c.commit();
yazmazsanız, o delete querysi çalışmıyor. Eğer ki bir dosya içindeki bazı queryleri sırayla çalıştırıyorsanız, bu noktada en sondaki queryniz DELETE ise çalışamyacağını berlitmek isterim (Python 2.4) Ama delete den sonra başka bir query var ise, o query sayesinde sanırım kendiliğinden commit ediyor.
C ile işiniz bittikten sonra
db.close();
demeyi de unutmayın. Açık kalmasın, saçmalar yine bişeyler olur. belli mi olur. (biraz gerginim, dün bayağı bi canımız yandı da.)
Pythonda herşeyi try catch bloklarına koyarsanız mantıklı olur.
Kullanımı şöyle :
try:
f = open("/usr/deneme/dosya.log", "a")
f.write("yazilacak icerik burada\n")
f.close()
except OSError, strerror:
print "LOG HATA: " + strerror
Python güzel bir dil fakat 2.5 ü , 2.7 si 3 ü, hepsi ayrı telden çalıyor. Bu da kişinin hem kafasını karıştırıyor, hem de yaptığı bir şeyden emin olamamasına sebep oluyor. Canınızı sıkabiliyor bu da. Yapmış olduğunuz programı özellikle python için diyorum, mutlaka object oriented yapın. Herkesin yaptığı iş belil olsun ve net o işi yapsın. Kodları çok refactor etmeyin, testlerden sonra çalışan kod doğruca çalışsın. (Fakat yine de bu neden çalışmıyor sorusuna, e bu çalışıyordu ne oldu??? diye soruyla karşılık verebilirsiniz. Biz yaşadık.)
]]>Tornado sadece bir chat uygulamasına yarayan framework değildir. Aynı zamanda basit ama etkili bir veritabanı sınıfına, template mekanizmasına ve mvc destekleyici bir yapıya sahiptir. Tornado’daki en temel sınıf RequestHandler sınıfı ve bu sınıftan uygulama içinde türetilecek sınıflardır. Bu sınıf yardımıyla get, post, file ve cookie işlemleri yapılır, aynı zamanda bu sınıftaki render metodu ile templateler yorumlanır.
Basit bir tornado uygulaması yaratmak için temel olarak 3 şeyi yapmak gerekecektir:
En az 1 adet RequestHandler sınıfından türeyen ve requeste karşılık response üretebilecek bir sınıf oluşturmak,
Hangi url isteklerine hangi RequestHandler sınıfının karşılık geleceğini belirlemek
Ana python kodununun main kısmını, yani uygulamanın bellekten çalışmaya başladığı kısmı oluşturmak.
Dilerseniz bu 3 maddenin de basitçe yer aldığı bir örnek oluşturalım:
İlgili kodu çalıştırıp “http://localhost:4444” adresine bağlandığınızda “Naber” yazısını göreceksiniz.
]]>