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