Ералаш
Материал из support.qbpro.ru
Версия от 14:54, 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())
