Сборка python-пакета PySQLite из исходников под ASPLinux 9.2
Исходники были получены с официального сайта PySQLite -
http://pysqlite.sourceforge.net/
Для сборки в качестве основы был взят spec-файл, найденный у известного
сборщика RPM пакетов для Fedora Core - Dag Wieers
(http://dag.wieers.com/packages/).
Наверное, все должно быть просто.
pysqlite-1.1.4.tar.gz
python-sqlite.spec
Сложим архив с сорцами в SOURCES (работаем относительно
/usr/src/asplinux/), а spec-файл в SPECS.
Подправим по себя spec:
Меняем Version: 0.5.0 на Version: 1.1.4. А также позволим себе немного
тщаславия - меняем
Packager: Dag Wieers <dag@w*****.com>
Vendor: Dag Apt Repository, http://dag.wieers.com/apt/
на
Packager: Alexandr Kolotov <akmypo***@m*****.ru>
Vendor: Local Repository
Все. Пробуем собрать.
# rpmbuild -bb --target athlon --clean python-sqlite.spec
Собралось? Устанавливаем!
# cd ../RPMS/athlon
# rpm -ihv python-sqlite-1.1.4-1.athlon.rpm
Для проверки работоспособности создадим скриптик:
begin tesr_db.py import sqlite
import sys
import operator
# За пример взят файл dbapi_transaction.py из стандартной поставки
# python-sqlite
# Глобальный объект, используемый для подсоединения к базе данных
# (коннект-объект)
cx = None
def getCon():
# Остальной код получает доступ к коннект-объекту через эту функцию
global cx
return cx
def createTables():
cu = getCon().cursor()
# Создаем таблицу индексов
cu.execute("""
create table t_indexes (
ind_id integer primary key,
ind_value text not null,
ind_desc text not null
)
""")
# Создаем таблицу базы ссылок
cu.execute("""
create table t_content (
cnt_id integer primary key,
cnt_link text not null,
cnt_desc text not null,
cnt_author text not null
)
""")
# Создаем таблицу связей индексов и ссылок
cu.execute("""
create table t_links (
lnk_ind integer,
lnk_cnt integer
)
""")
# Завершаем транзакцию
getCon().commit()
def createIndex(val, desc):
cu = getCon().cursor()
# Создаем новый индекс
cu.execute("""
insert into t_indexes(ind_value, ind_desc)
values (%s, %s)
""", (val, desc))
getCon().commit()
return cu.lastrowid
def createLinks(index, element):
cu = getCon().cursor()
# Создаем новую связь
cu.execute("""
insert into t_links(lnk_ind, lnk_cnt)
values (%s, %s)
""", (index, element))
getCon().commit()
return cu.lastrowid
def getLinksByValue(val):
cu = getCon().cursor()
# Поиск в таблице идентификатора индекса по значению индекса
cu.execute("""
select ind_id from t_indexes where ind_value=%s
""", (val,))
return cu.fetchone()[0]
def createElement(link, desc, author, inds):
cu = getCon().cursor()
# Создаем новый элемент (ссылку)
cu.execute("""
insert into t_content(cnt_link, cnt_desc, cnt_author)
values (%s, %s, %s)
""", (link, desc, author))
getCon().commit()
# Запоминаем текущее значение идентификатора ссылки
cur_id = cu.lastrowid
# Добавляем записи типа "идентиф. индекса" - "идентиф. ссылки" в
# таблицу связей
map(createLinks,map(getLinksByValue, inds),(cur_id,)*len(inds))
def updateElement(id, link, desc, author):
cu = getCon().cursor()
# Обновляем значения полей элемента (ссылки)
cu.execute("""
update t_content
set cnt_link=%s, cnt_desc=%s, cnt_author=%s
where cnt_id=%s
""", (link, desc, author, id))
getCon().commit()
def getElement(id):
cu = getCon().cursor()
# Выборка из таблицы элемента с нужным идентификатором
cu.execute("""
select * from t_content
where cnt_id=%s
""", (id,))
return cu.fetchone()
def main():
global cx
cx = sqlite.connect("test.sqlt", encoding="utf-8")
createTables()
createIndex("mail", "Почта")
createIndex("virus", "Вирусы, борьба с вирусами, антивирусы")
createIndex("filter", "Фильтрация трафика и контента")
createIndex("squid", "SQUID - кэширующий прокси сервер")
createElement("linux/mail/aaa.html", "Использование ClamAV для \
фильтрации почтового трафика", "кто-то",
("mail","virus","filter"))
createElement("linux/squid/aaa.html", "Вырезаем баннеры", "еще кто-то",
("squid","filter"))
one_element = getElement(1)
# Выведем результат запроса
print one_element[0], one_element[1], one_element[2], one_element[3]
# Произведем некоторые дейтсвия со третьим элементом
x = map(None, tuple(one_element[2]))
x.reverse()
ss = reduce(operator.__add__, x)
updateElement(one_element[0], one_element[1], ss, one_element[3])
one_element = getElement(1)
print one_element[0], one_element[1], one_element[2], one_element[3]
cx.close()
if __name__ == "__main__":
main()
end tesr_db.py Запустим его и посмотрим на его вывод?
$ python test_db.py
1 linux/mail/aaa.html Использование ClamAV для фильтрации почтового трафика кто-то
1 linux/mail/aaa.html акифарт оговотчоп иицартьлиф ялд VAmalC еинавозьлопсИ кто-то