-
-
Save hmert/733984 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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