Month: Mart 2007

yorumsuz!..

Posted by – 30 Mar 2007

Sql komutları hakkında bilgi ararken adresini vereceğim sayfaya girdim. “Bu sayfa en iyi … tarayıcısı (sürüm no ile hemde) ile görüntülenmektedir” yazısından bıkılmış ki yeni versiyonu türetilmiş. ie dışındaki tarayıcılarla bakmanız gerekmektedir :)
sayfa

Python ile soket programlama

Posted by – 22 Mar 2007


Başlangıç adına yazılması gereken çok şey olsa da, hazırlamış olduğum doküman uygulamaya dönük olduğundan burada yer alan kavramları bildiğinizi varsayıyorum. Yinede tanımlamak istediğim kavram şudur; internet aracılığıyla çalışan programlar soket kullanırlar ve soket programlarıdır. Bir makinede birden fazla soket vardır, akla gelen ilk örnekler http, ftp,ssh, telnet gibi…

serverhost = ‘x’ #sunucunun çalıştığı ip
serverport = y #sunucunun çalıştığı port
BUFSIZ=z #alınan veri için max. boyut
addr = (serverhost,serverport)
istemci ;
csock = socket(AF_INET, SOCK_STREAM,0)

# AF_INET (ARPA Internet protocols) soket ailesidir, internet uygulamalarında bu aile seçiliyor, SOCK_STREAM ise soketimizin türüdür burada TCP e göre seçilmiştir. Tür belirlemede SOCK_STREAM İLE SOCK_DGRAM arasındaki farkları bilmeniz önemlidir.

csock.connect(addr) #socket() ile tanımlanan soketin addr ye bağlanması
csock.send() # sunucuya veri gönderme
csock.recv(BUFSIZ) #sunucudan gelen veriyi alma
csock.close() # bağlantının kapatılması

sunucu ;

ssock = socket(AF_INET, SOCK_STREAM)
ssock.bind(addr) #Soketi adres ve isim bilgileri ile ilişkilendir
ssock.listen(2) #dinleyeceği max. bağlantı sayısı
ssock.accept() # kabul ettiği bağlantı bilgilerini verir(addr, ve bağlantı nesnesi)
ssock.send() #istemciye veri gönderme
ssock.recv(BUFSIZ) #sunucuya gönderilen veriyi alma

Kendi sunucu ve istemcimizi tasarlama zamanımız geldi;

sunucu.py;

from socket import *

serverhost = ‘127.0.0.1′
serverport = 2000
BUFSIZ=1024
addr = (serverhost,serverport)
ssock = socket(AF_INET, SOCK_STREAM,0)
ssock.bind(addr)
ssock.listen(2)
while (1):
clientsock, addr = ssock.accept()
print “connected:”,addr
while True:
data = clientsock.recv(BUFSIZ)
if not data:
break
else:
data=”client: “+data
print data
data = raw_input(’server: ‘)
clientsock.send(data)
ssock.close()

sunucu.py yi incelediğimizde oluşturulan sunucu soketimiz dinlemede aşamasındadır. ilk while döngüsü sunucuya bağlanan istemciyi sunucu kabul ettiğinde geçerlidir , sunucu kabul ettiği bağlantı ile boş veri alana kadar veri alıp veri gönderir. Boş veri alırsa, yani veri yollanmaz ise bağlantı düşer.

istemci.py ;

from socket import *

serverhost = ‘127.0.0.1′
serverport = 2000
BUFSIZ=1024

addr = (serverhost,serverport)
csock = socket(AF_INET, SOCK_STREAM,0)
csock.connect(addr)
while (1):
data = raw_input(’client: ‘)
if not data:
break
else:
csock.send(data)
data = csock.recv(BUFSIZ)
data=”server: “+data
print data

csock.close()

istemci.py de sunucumuza bağlanıp veri göndermektedir while döngüsü içinde, gönderdiği veri olmadığı durumda bağlantı sona ermektedir.

Bu konuya değinmemin sebebi yapmış olduğum oyun+chat programından önce bir alıştırmadır. OpenGL grafik arayüzü ile hazırlamş olduğum çalışmayı en kısa zamanda ekleyeceğim.

NOT: python syntaxına dikkat edelim, boşluklar görünmüyor

Python ile MySQL server üzerinde işlem yapmak

Posted by – 20 Mar 2007

Okul projelerinden zaman bulduğumda yazı yazmaya gayret gösteriyorum ancak bu pek kolay olmuyor. Neyseki bu seferki de anlattıldı. Konumuz başlığından da anlaşılacağı üzere python ile mysql serverda işlemler yapmak. Python ile bu işlemleri yapmak için ben pythonun MySQLdb modülünü kullanmaktayım. MySQLdb python için populer MySQL database servera bir arayüzdür.

Metin işlemcisi ile açmış olduğumuz deneme.py dosyamızın başına MySQLdb modülünü ekliyoruz

import MySQLdb

import sys

try:

conn = MySQLdb.connect (host = “localhost”,user = “anil”,passwd = “12345″,db = “deneme”)

# bağlantı oluştururken try except blokları kullanılır

except MySQLdb.Error, e: # mySql servera bağlanılmadığı durumdaki işlemler

print “Error %d: %s” % (e.args[0], e.args[1]) # hata yazılıyor

sys.exit (1) # uygulama sonlandırılıyor

cursor = conn.cursor () # bağlantı üzerinde imleç nesnesi oluşturma
cursor.execute (”SELECT * FROM tablo1″) # imlec üzerinde çalışacak sql stringimiz
rows = cursor.fetchall () # kayıtlarımızı kayıt dizisine atmaktayız

#bu kısmı biraz açıklamak gerekirse diyelim ki 5 sütundan oluşan bir tablomuz var ve toplam 20 satır kayıt bulunmakta. rows dediğimiz şey tüm satırları içeren bir dizidir ilk satırdaki verilere erşimek için rows[0] deriz. İlk satırdaki ilk sütuna ulaşmak istediğimizde de rows[0][0] demeliyiz.
# biz bu işi kolaylaştırıp for döngüsü ile verilerimizi alıyoruz

for row in rows:
for i in range(sutunno): # tablomuzdaki sütun sayısı
print row[i]

cursor.close() # işlemimizi kapatıyoruz

fetchall() dışında;

fetch_row() metodu ile tek satırlık kayıtlar alınmaktadır. Sql stringiniz sonucunda dönecek değer tek kayıttan ya da tek sutundan oluştuğu sırada kullanılması iyi olur.

fetchone() imleç üzerinde yapılan son işlem sonucu dönen kayıtlardan ilkini verir.Daha sonra bir sonraki kayıtta konumlanır.

rowcount() imleç üzerinde çalıştırılan son sorgu sonucu dönecek satır sayısını vermektedir

Python ile MySQL server üzerinde işlem yapmaya bir giriş olarak bu konuyu değerlendirebilirsiniz.

Not: Python syntax yapısına dikkat edin, boşluklar görünmüyor bende :)