usr local bin python coding utf8 CopyLeft ffsdmad 04 2008 mailto ffsdm

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#!/usr/local/bin/python
# -*- coding: utf8 -*-
"""
CopyLeft ffsdmad 04.2008
mailto: ffsdmad@gmail.com
модуль подключения, выборки, представления результатов от MySQL
для работы использовать уже инициализированный объект:
bd_sql=Base() -> from base import bd_sql
"""
import config
import MySQLdb
class Base:
"""
подключение к Mysql Базе, необходим модуль config
использовать только инициализированный объект:
from base import bd_sql
"""
__db__=None
__curs__=None
__res__=0
__history__=""
def __init__(self):
if self.__db__==None and self.__curs__==None:
self.__db__=MySQLdb.connect(config.bdhost,config.bduser,config.bdpass,config.bdname)
# включение CHARSET соединения
if len(config.bscharset)>0:
self.__db__.query(config.bscharset)
self.__curs__=self.__db__.cursor()
def execute(self,SQL_TEXT,COMMENT=""):
"""
выполняет SQL запрос, возвращает количество строк, иначе 0
"""
self.__history__+="<sql><![CDATA[%(s)s]]><comment>%(c)s</comment></sql>"%{"s":SQL_TEXT,"c":COMMENT}
try:
self.__res__=self.__curs__.execute(SQL_TEXT)
return self.__res__
except:
return 0
def get_row(self,n=0):
"""
возвращает n`ую строку результата, иначе None
"""
if (n>0) and n <= self.__res__:
row={}
for i in range(0,n):
row = self.__curs__.fetchone()
return row
if n==0:
return self.__curs__.fetchall()
return None
def get_xml(self,root=None,event=None):
"""
возвращает XML представление результатов запроса
требуется передать имя XML дерева ( <%s>...</%s>,root )
"""
fields = []
xml_str_tmpl="<row>"
# генерация шаблона строки
for fl in self.__curs__.description:
f0=fl[0]
fields.append(f0)
xml_str_tmpl+="<"+f0+">%("+f0+")s</"+f0+">"
xml_str_tmpl+="</row>"
# перебор строк
# xml_str="<rows name='%s'>"%root
xml_str=""
for i in range(0,self.__res__):
row = self.__curs__.fetchone()
rt={}
# генерация XML документа
for i in range(len(fields)):
try:
rt[fields[i]]=event[fields[i]](row[i])
except:
rt[fields[i]]=row[i]
xml_str+=xml_str_tmpl%rt
if root:
return "<"+root+">"+xml_str+"</"+root+">"
return xml_str
def history(self):
"""возвращает историю sql запросов в виде xml"""
return "<history_sql>%s</history_sql>"%self.__history__