Posted by & filed under python.

Определение итератора:

class MyIter:
    def __init__(self, start, stop):        
        self.value = start - 1
        self.stop  = stop
    def __iter__(self):                     
        return self
    def next(self):                         
        self.value += 1
        if self.value > self.stop:
            raise StopIteration        
        return self.value

Работа с итератором:

for i in MyIter (1,5):
        print i

Posted by & filed under PostgreSQL.

Вообще, решение проблемы я нашел здесь http://neilconway.org/docs/sequences/. На случай если ссылка будет не доступна напишу самое главное:
Создание таблицы

CREATE TABLE users (
    id    SERIAL PRIMARY KEY,
    name  TEXT,
    age   INT4
);

SERIAL — аналог auto_increment
Создание записи:

INSERT INTO users (name, age) VALUES ('Mozart', 20);

Posted by & filed under python.

Размышления.
Почему в функцию должны передаваться все параметры, а не использовать глобальные? Да потому что если захочешь эту функцию вызвать из другого класса (модуля), то её уже стоит поместить в отдельный модуль, а тут связь с глобальными переменными (переменными класса  и т.д.) рушится

Posted by & filed under PostgreSQL.

Пример:

CREATE OR REPLACE FUNCTION myschema.find_available(num_State integer)
RETURNS SETOF integer AS
$BODY$
	plan0= plpy.prepare("SELECT id,start_available, stop_available FROM "Flat" WHERE state=$1",["integer"])
	rv=plpy.execute(plan0,[num_State])
...
BODY$
  LANGUAGE 'plpythonu' VOLATILE
  ...

Выдает сообщение

DETAIL:  <type 'exceptions.NameError'>: global name 'num_State' is not defined

Приводим переменную num_State к нижнему регистру ( num_state) и ошибки уже нет.

Posted by & filed under python.

Делал логирование на сайте, сначала писал код так

a= md5.new("password").digest()

В результате значение «а» принимало бинарный(? незнаю как правильно сказать) вид и нельзя было записать в БД. Решение простое — нужно делать так:

a= md5.new("password").hexdigest()

Значение «а» можно писать в БД