Hi.
I want to catch MySQL error.
This is my code.

#!/usr/bin/env python
#-*- coding:utf-8 -*-

#       Copyright 2009 Grigor Kolev <grigor.ko...@gmail.com>
#       
#       This program is free software; you can redistribute it and/or modify
#       it under the terms of the GNU General Public License as published by
#       the Free Software Foundation; either version 2 of the License, or
#       (at your option) any later version.
#       
#       This program is distributed in the hope that it will be useful,
#       but WITHOUT ANY WARRANTY; without even the implied warranty of
#       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#       GNU General Public License for more details.
#       
#       You should have received a copy of the GNU General Public License
#       along with this program; if not, write to the Free Software
#       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
#       MA 02110-1301, USA.

from time import sleep
from time import localtime
import MySQLdb, sys
#------------------------------------------------------------------------------------------------------------------------------
class Config ():
	
	'''Това е основен клас всички други са негови подкласове.
		Този клас зарежда данните от конфигурационния файл.
		Премахва коментарите.
		Изгражда променливите с данните от конфигурацията.
		Тези данни се използват във всички останали класове.'''	
			
	def __init__(self, config_file = 'mail_list.conf'):

		self.config = open(config_file, 'r')		#	Отваря  cinfif файла за четене.
		self.config = self.config.readlines()		#	Прочита файла.
		try:
			b = 0	#	Брояч
			while 1:
				if self.config[b][0] == '#':	#	Индексира списъка получен при четенето
					del self.config[b]		#	на conf файла. Ако ред започва с # 
					self.config[b] = self.config[b][:-1]
				else:						#	го изтрива от списъка.
					 b+=1
		except IndexError:					#	Прихваща грешката получена при край 
			pass 						#	на файла и продължава с изпълнението.
		try:
			self.db_root_pass = self.config[0][5:]	#	Взема паролата на root за базата
		except MySQLdb.DatabaseError:
			raise Error, 'OperationalError: Достъп отказан. Невалидна root парола за базата'
			sys.exit()
		
		self.db_host = self.config[1][5:]
		self.work_user_name = self.config[2][5:]
		self.work_user_pass = self.config[3][5:]
		
#------------------------------------------------------------------------------------------------------------------------------

class Error (Exception):
	
	'''Класа обхваща някой от възможните грешки и ги записва във лог файл.'''
	
	def __init__(self, values):
		
		self.values = values		#	Приема грешката дадена при повдигане на изключение.
		self.write_in_log()		#	Изпълнява функцията за записване в лог файла.
	
	def error_time(self):		#	Получава времето на генериране на грешката.
		'''Получава времето на генериране на изключението и оформя данните
		за запис.'''
		self.date = str(localtime()[2]), str(localtime()[1]), str(localtime()[0])	#	Оформя
		self.time = str(localtime()[3]), str(localtime()[4:])					#	за запис.
		
	def write_in_log(self):
		'''Записва времето на генериране на грешката и самата грешка във лог файл'''
		self.error_time()		#	Изпълнява функцията за получаване на времето.
		self.values ='[%s-%s-%s]-->[%s:%s]  %s\n' % (self.date[0], self.date[1], self.date[2],
		self.time[0], self.time[1], self.values)	#	Оформя получените данни.
		
		try:
			log_file = open('error.log', 'a')		#	Отваря лог файла.
		except IOError:						#	При липса на лог 	
			log_file = file('error.log', 'w')			#	го създава.
		log_file.write(self.values)					#	Запис.
		log_file.close()							#	Затваря лога.

#------------------------------------------------------------------------------------------------------------------------------

class SQL (Config):
	
	'''Създаване на базата данни. Създава таблицата.
	Създава работен потребител с ограничени права.
	Осъществява връзка с базата'''
	
	def create_db(self ):		#Създаване на базата данни.
	
		'''Създава базата данни и таблицата където ще се записва'''
	
		connect = MySQLdb.connect(host=self.db_host, user='root', passwd=self.db_root_pass)		#	Връзка с базата
		create = connect.cursor()	#	Отваря базата	
		create.execute('''CREATE DATABASE IF NOT EXISTS site_db;''')	#	Изпълнява командата подадена към базата
		create.execute('''CREATE TABLE IF NOT EXISTS `site_db`.`user_list` (
  					`ID` INT  NOT NULL AUTO_INCREMENT,
  					`E-mail` VARCHAR(100) ,
  					`Name` VARCHAR(100) ,
  					`Skill` VARCHAR(200) ,
  					`Pic` VARCHAR(100) ,
  					PRIMARY KEY (`ID`)
					)
					ENGINE = MyISAM
					CHARACTER SET utf8 COLLATE utf8_general_ci;''')

	def create_db_work_user(self):	#	Създава работен потребител с ограничени права.
	
		'''Създава работен потребител с ограничени права.'''

		connect = MySQLdb.connect(host=self.db_host, user='root', passwd=self.db_root_pass, db='site_db')	#	Взима паролата и хоста от cong файла
		user_create = connect.cursor()
		try:
			user = '''CREATE USER '%s'@'localhost' IDENTIFIED BY '%s';''' % (self.work_user_name, self.work_user_pass)		#	Взима името на 
			user_create.execute(user)																			#	новия потребител
		except MySQLdb.OperationalError:		#	Прихваща грешката получена ако потребителя съществува
			pass
		user = '''GRANT SELECT,INSERT,UPDATE,DELETE ON site_db.user_list  TO '%s'@'localhost';''' % (self.work_user_name)	#	Задава права
		user_create.execute(user)		#	Малко с правата тъпо че всеки път се създават но не можах да измисля друго
		
	def connect_db(self):
		
		'''Връзка с базата данни'''
		
		self.db_connect = MySQLdb.connect(host=self.db_host, user=self.work_user_name, passwd=self.work_user_pass, db='site_db')
		self.db_cursor = self.db_connect.cursor()
		
#------------------------------------------------------------------------------------------------------------------------------
#if __name__ == '__main__':		#	Проверка дали модула се стартира или импортира.
#	while 1:		#	Безкраен цикъл.
#		try:		#	Проверка за наличие на conf файл.
#			conf = Config()	#	Стартира клас Config.
#		except IOError:		
#			raise Error, 'Error: Фатална грешка липсва конфигурационен файл'
#			sys.exit()
#		sql = SQL()
#		sql.create_db()
#		sql.create_db_work_user()
		
#------------------------------------------------------------------------------------------------------------------------------
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to