FastNetMon

Showing posts with label Pylons. Show all posts
Showing posts with label Pylons. Show all posts

Sunday, 18 October 2009

Pylons: подключение базы данных

Теперь подключаем базу данных к Pylons.

Ставить все будем либо на Постгресе - http://phpsuxx.blogspot.com/2010/03/postgresql-8-centos-debian-5.html либо на MySQL (http://phpsuxx.blogspot.com/2009/12/mysql-debian5-lenny.html). От типа БД зависит только sqlalchemy.url и все.

Модуль для работы с PostgreSQL из Python:
apt-get install python-psycopg2


Модуль для работы с MySQL из Python
apt-get install -y python-mysqldb


Теперь указываем урл до бд в файле
vi development.ini


PostgreSQL:
sqlalchemy.url = postgres://my_db_user:qwerty@127.0.0.1:5432/my_test_database


MySQL:

sqlalchemy.url = mysql://my_db_user:qwerty@127.0.0.1/my_test_database


В самый верх файла (блок импорта) myapp/model/__init__.py добавляем:

import sqlalchemy as sa
from sqlalchemy import orm


А в самый его же низ (без отступов вообще!):

t_persons = sa.Table("persons", meta.metadata,
sa.Column("id", sa.types.Integer, primary_key=True),
sa.Column("name", sa.types.String(100), primary_key=True),
sa.Column("email", sa.types.String(100)),
)

class Person(object):
pass

orm.mapper(Person, t_persons)



Инициализируем БД (при этом из описанной нами схемы будет сгенерирован sql код для конкретной бд, в нашем случае это Постгрес):
paster setup-app development.ini


В ответ будет выдано примерно следующее:

Running setup_config() from servermon.websetup
23:50:21,962 INFO [sqlalchemy.engine.base.Engine.0x...5c10] [MainThread] SELECT DATABASE()
23:50:21,963 INFO [sqlalchemy.engine.base.Engine.0x...5c10] [MainThread] ()
23:50:21,964 INFO [sqlalchemy.engine.base.Engine.0x...5c10] [MainThread] SHOW VARIABLES LIKE 'character_set%%'
23:50:21,964 INFO [sqlalchemy.engine.base.Engine.0x...5c10] [MainThread] ()
23:50:21,964 INFO [sqlalchemy.engine.base.Engine.0x...5c10] [MainThread] SHOW VARIABLES LIKE 'lower_case_table_names'
23:50:21,964 INFO [sqlalchemy.engine.base.Engine.0x...5c10] [MainThread] ()
23:50:21,965 INFO [sqlalchemy.engine.base.Engine.0x...5c10] [MainThread] SHOW COLLATION
23:50:21,965 INFO [sqlalchemy.engine.base.Engine.0x...5c10] [MainThread] ()
23:50:21,967 INFO [sqlalchemy.engine.base.Engine.0x...5c10] [MainThread] SHOW VARIABLES LIKE 'sql_mode'
23:50:21,968 INFO [sqlalchemy.engine.base.Engine.0x...5c10] [MainThread] ()
23:50:21,968 INFO [sqlalchemy.engine.base.Engine.0x...5c10] [MainThread] DESCRIBE `persons`
23:50:21,968 INFO [sqlalchemy.engine.base.Engine.0x...5c10] [MainThread] ()
23:50:21,969 INFO [sqlalchemy.engine.base.Engine.0x...5c10] [MainThread] ROLLBACK
23:50:21,969 INFO [sqlalchemy.engine.base.Engine.0x...5c10] [MainThread]
CREATE TABLE persons (
id INTEGER NOT NULL AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
email VARCHAR(100),
PRIMARY KEY (id, name)
)

23:50:21,969 INFO [sqlalchemy.engine.base.Engine.0x...5c10] [MainThread] ()
23:50:22,069 INFO [sqlalchemy.engine.base.Engine.0x...5c10] [MainThread] COMMIT


В самой же базе данных это принимает вид:

CREATE TABLE `persons` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(100) NOT NULL,
`email` varchar(100) default NULL,
PRIMARY KEY (`id`,`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8


Кстати, хотелось бы напомнить, что если после деплоя схемы в базу вы ей измените и повторно запустите setup-app, то новые поля добавлены не будут. Как это побороть, я пока не понял.

Более полная документация: http://www.sqlalchemy.org/docs/ и http://pylonshq.com/docs/en/0.9.7/models/#working-with-sqlalchemy

Saturday, 17 October 2009

Установка Pylons 0.9.7 на Debian 5 Lenny

Сейчас мы будем ставить все необходимое ПО для разработки на Pylons.

Ставим компилятор и make, они могут пригодится для установки некоторых расширений:
apt-get install make gcc python-dev build-essential


Ставим Python и easy_install:
apt-get install -y python python-setuptools


Сначала поставим библиотеки, которые нам пригодятся для работы.


Потрясающий шаблонизатор. Почему? Вот поэтому: http://genshi.edgewall.org/wiki/Documentation/0.5.x/xml-templates.html
easy_install genshi


Пожалуй, лучший в мире ДЯП ORM
easy_install SQLAlchemy


Устанавливаем сам Pylons (здесь он актуальной версии, так что качать с сайта нет необходимости; также тут проблема в том, что стандартно ставится актуальная версия, а актуальная сейчас - 0.10rc1):
easy_install Pylons


А между делом, как искать пакеты через easy_install я так и не понял, поэтому юзаю: http://pypi.python.org/pypi

Теперь, когда весь софт стоит, можем приступать к созданию проекта:

cd
paster create -t pylons myapp


В процессе работы мастера на вопрос о выборе шаблонизатора выбираем: genshi, а на запрос "ставить ли SQLAlchemy" отвечаем утвердительно - True.

Теперь можно запускать проект :) Переходим в папку: myapp и выполняем команду (обращаю внимание на параметр --reload, он означает, что приложение будет перезапускаться автоматически при любых изменениях в файлах проекта ):

cd myapp
paster serve --reload development.ini


А теперь настал момент увидеть это чудо! Открываем http://127.0.0.1:5000 и падаем в экстазе :)

Если Вам нужно, чтобы приложение работало и после отключения от SSH консоли, запускайте его вот так:
nohup paster serve --reload development.ini &


Кстати, чтобы запустить сервер на всех интерфейсах в файле указанном ниже необходимо "127.0.0.1" заменить на "0.0.0.0".
vi development.ini


Офсайт проекта: http://pylonshq.com/

Saturday, 10 October 2009

Где скачать Pylons?

Вот тут: http://pylonshq.com/download На сайте полчаса искал блин, везде автоинсталляторы :(