Skip to content

Instantly share code, notes, and snippets.

@roktas
Created July 11, 2010 02:09
Show Gist options
  • Save roktas/471210 to your computer and use it in GitHub Desktop.
Save roktas/471210 to your computer and use it in GitHub Desktop.
#!/usr/bin/python
# -*- coding: utf-8 -*-
import MySQLdb, MySQLdb.cursors
# bağlantı oluştur
db = MySQLdb.connect(
host="localhost",
user="as_fbel_a",
passwd="*", # bunlar gizli
db = "*", # bunlar gizli
# kursörde her satırın bir sözlük olmasını istiyoruz
cursorclass = MySQLdb.cursors.DictCursor,
)
# bir adet kursör rica edelim
cursor = db.cursor()
# kursörümüzü doldurakım
cursor.execute("SELECT * FROM kul")
# kursörde kaç satır satır var
toplam = int(cursor.rowcount)
print "%d adet kayıt var" % toplam
# kursörde dolaşalım, her satır bir sözlük
for row in cursor:
# önce ne var, hepsini gör
print row
# örneğin ad değeri
print "ad: %(ad)s" % row
# yeter bu kadar!
break
#!/usr/bin/python
# -*- coding: utf-8 -*-
from util import *
SABLON = {
"ad" : [9, 22],
"soyad" : [9, 25],
}
kayitlar = [
{
"ad": "recai",
"soyad": "oktaş",
},
{
"ad": "gökhan",
"soyad": "demir",
},
]
tuval = tuval_hazirla('test.pdf')
for kayit in kayitlar:
tuval_bas(tuval, kayit, SABLON)
tuval.save()
#!/usr/bin/python
# -*- coding: utf-8 -*-
import MySQLdb, MySQLdb.cursors
from util import *
# bağlantı oluştur
conn = MySQLdb.connect(
host="localhost",
user="as_fbel_a",
passwd="*", # bunlar gizli
db = "*", # bunlar gizli
# bu örnekte kursör sınıfını ayarlamaya gerek yok
# çünkü yinekursor bunu kendisi yapacak.
)
# Bu örnekte amacımız veri tabanında ismi "ahmet" olanları bulmak ve
# bulduklarımızı bir pdf'ye basmak
# boyama yapacağımız tuval
tuval = tuval_hazirla('ahmetler.pdf')
# baskıda kullanılacak şablon. şablon anahtarlarını veritabanı tablosundaki
# alanlarla aynı seçiyoruz! her bir alanın tuvalde çizilmeye başlanacağı
# x ve y koordinatlarını şablonda belirtiyoruz. matbu kağıt üzerinde biraz
# denemeyle bu x, y koordinatlarını bulabilirsiniz.
SABLON = {
"ad" : [9, 22],
"soyad" : [9, 25],
}
# SQL sorgu deyimine beslenecek bir sözlük
# neden? çünkü bu şekilde sql enjeksiyonları "kafadan" önlenmişş
# oluyor. bu konuda ayrıntılar için bk:
# http://bobby-tables.com/python.htmlhttp://bobby-tables.com/python.html
veri = {'ad': 'Ahmet'}
# bir bağlantı oluşturup yinelenebilir bir nesne (kursör) alacağız
# kursörün bir SQL sorgusuyla oluştuğuna dikkat! bu sorguyla istediğiniz
# filtrelemeyi yapabilirsiniz. ne de olsa SQL!
for kayit in yinekursor(conn, "SELECT * FROM kul WHERE ad = %(ad)s", veri):
# kursörde bir sözlük var, istediğiniz gibi kullanın
# print "%(ad)s, %(soyad)s" % kayit
# güzel! boyama yapalım
tuval_bas(tuval, kayit, SABLON)
# resim bitti, kaydet
tuval.save()
#!/usr/bin/python
# -*- coding: utf-8 -*-
import MySQLdb
assert MySQLdb.apilevel == "2.0"
from MySQLdb.cursors import DictCursor
from MySQLdb.cursors import SSDictCursor
from reportlab.pdfgen import canvas
from reportlab.lib.units import cm
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
def tuval_hazirla(pdfdosya, yazitipi="FreeSans", punto=9):
# yazıtipini doğru seçmez isek Türkçe karakterler sorunlu çıkar
# öntanımlı "FreeSans" gayet yeterli. şimdi bu yazıtipinin nerede
# bulacağını söyleyelim (bir ttf dosya)
pdfmetrics.registerFont(
TTFont(yazitipi, "/usr/share/fonts/truetype/freefont/" + yazitipi + ".ttf")
)
# verilen dosyayı tuval yapıyoruz
tuval = canvas.Canvas(pdfdosya)
# yazıtipi şu olmalı diyoruz
tuval.setFont(yazitipi, punto)
return tuval
def tuval_bas(tuval, kayit, sablon):
"""verilen kaydı şablona uygun şekilde tuvale bas"""
"""burada şablon alan: (x, y) koordinat bilgisini taşıyor"""
# boş bir sözlük alalım, bunu dolduracağız
kart = {}
# sablon'da olup verilen kayıtta olmayan alanları takip lazım
eksikler = []
# sablondaki her alan için
for alan in sablon:
# eksik bir alanı boş dizgi yapıyoruz
deger = ""
# alan verilen kayıtta var mı?
if alan in kayit:
# var. dizgiye çevir (tamsayı değerler olabilir)
deger = str(kayit[alan])
else:
# hmm, yok. eksiklere ekle bunu, raporlama için
eksikler.append(alan)
kart[alan] = deger
# eksikleri raporla bakayım
for eksik in eksikler:
print "%(eksik) alanı kayıtta bulunamadı" % eksik
# artık kartımızdaki her değeri tuvale basacağız
for alan in kart:
# tuvalde nereye? şablon bunun için var. x ve y koordinatları.
(x, y) = sablon[alan]
# boyama yap
tuval.drawString(x*cm, y*cm, kart[alan])
# bu sayfa bitti
tuval.showPage()
# eksikler bilgisini de dönelim, çağıran için değerli olabilir
return len(eksikler) == 0
class yinekursor:
"""yinelenebilir kursör sonuçları dön"""
def __init__(self, baglanti, sorgu, veri = None):
self._cursor = baglanti.cursor(SSDictCursor)
self._cursor.execute(sorgu, veri)
def __iter__(self):
while True:
result = self._cursor.fetchone()
if not result: return
yield result
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment