Ералаш
Материал из support.qbpro.ru
Версия от 14:55, 4 августа 2013; imported>Supportadmin
Примеры хорошего дизайна:
7Z
7z -t7z -mx=9 -r -ssc a /home/bases/bases-arh/day-on/base_`date +%d_%m_%y`.7z /home/bases/bases-arh/temp;
кстати в этой команде русский поддерживается.. но в скрипте надо локаль цеплять обязательно.. если работаешь через крон вот так: export LANG=ru_RU.UTF-8;
Обработка строк, полученных из БД PostgreSQL
Задача: В таблице mytable есть 3 поля,первое поле - униальный ключ, во втором поле содержатся данные в виде: "Вася;петя;оля;...;толя" Необходимо разделить все имена по отдельности, сделать заглавной первую букву и занести их в таблицу mytable2, где первое поле - уникальный ключ
Решение:
import psycopg2 import sys import string def main(): conn_string = "host='localhost' dbname='db' user='pguser' password='pwd'" print "Connecting to database\n ->%s" % (conn_string) try: conn = psycopg2.connect(conn_string) cursor = conn.cursor() except: exceptionType, exceptionValue, exceptionTraceback = sys.exc_info() sys.exit("Database connection failed!\n ->%s" % (exceptionValue)) cursor.execute("SELECT * FROM mytable") # в таблице 3 поля temp_prof=list(cursor.fetchall()) # превращаем объект QuerySet в простой список conn.commit() # завершение транзакий for row in temp_prof: # перебираем все записи в списке, можно выбирать только второе поле, память сэкономим for val in row[1].split(';'): # втором элементе каждой строки содержатся фразы, разделенные символом ";" # их количество разное, поэтому циклом val1=val.decode('utf-8').strip().capitalize() # необходимо для правильного разбора фразы, её длины(не удвоенной) # и вообще символов. # декодировал в ютф8 - обрезал пробелы - первый символ сделал заглавным cursor.execute("SELECT COUNT(*) FROM mytable2") #сколько записей в mytable2 на момент запроса ttemp=list(cursor.fetchall()) # превращаем объект QuerySet в простой список conn.commit() print ttemp[0][0] # ttemp возвращает [(0L,)] - словарь или список, то что после функции list() получилось # ttemp[0] возвращает (0L,) - кортеж (в конце запятая) # ttemp[0][0] возвращает 0 - число, то что надо(COUNT(*) в моём случае равно 0(в самом начале)). new_index_tabl_info = ttemp[0][0]+1 # присваиваем индекс в mytable2 (следующий) cursor.execute("SELECT * FROM spravochnik_siz_professia_info WHERE professia= '%s'" % val1) # есть ли фраза в таблице temp=list(cursor.fetchall()) # превращаем в список для удобства conn.commit() if not temp: # если список пуст, т.е. нет фразы в таблице data = {'id':str(new_index_tabl_info), 'prof':val1} # формируем словарь значений ключ:значение # ВАЖНО! Ключ должен совпадать с именем поля в таблице cursor.execute("""INSERT INTO mytable2 VALUES (%(id)s, %(prof)s);""", data) # заносим данные в mytable2 conn.commit() cursor.close() # очищаем память - закрываем курсор conn.close() # очищаем память - закрываем соединение sys.exit() # game over if __name__ == "__main__": sys.exit(main())