[django][trironn] Ubuntu上でTritonnインストールしDjangoから使用できるか試す2
移転しました。
2008/05/25からの続き
本日はDjango上からtritonn上のSQLを呼び出すための、アプリを作成する。
作成中
テストアプリケーションの作成
アプリ作成
$ django-admin.py startproject mysite $ python manage.py startapp polls $ vi polls/models.py ----- from django.db import models class Poll(models.Model): question = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') -----
DB作成
$ mysql -u root > create database hoge; > quit; vi /RROJECT_ROOT/settings.py ----- : : DATABASE_ENGINE = 'mysql' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. DATABASE_NAME = 'hoge' # Or path to database file if using sqlite3. DATABASE_USER = 'root' # Not used with s : : TEMPLATE_DIRS = ( 'polls/template' ) : : INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'mysite.polls' ) -----
Tritonn用のSQL設定
アプリケーション名/sql の下に、モデル名(小文字).sqlで保存しておくと、CREATE TABLEした後にテーブルを自動で実行してくれるらしい。
ここを参照
$ cd /ROOT/polls $ mkdir sql $ cd sql $ vi poll.sql ----- alter table poll add fulltext using ngram(question); ----- 初期テーブル作成 $ cd /ROOT/polls $ python manage.py syncdb 初期データ作成 $ mysql -u root hoge > insert into poll (id, question, pub_date) values (1, '明日は晴れか?', now()); > insert into poll (id, question, pub_date) values (2, '今日は雨か?', now());
fulltextがちゃんと作成されているか確認
$ mysql -u root hoge > show index from poll; +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ | poll | 0 | PRIMARY | 1 | id | A | 0 | NULL | NULL | | BTREE | | | poll | 1 | question | 1 | question | NULL | NULL | NULL | NULL | | FULLTEXT | | +-------+------------+----------+--------------+-------------+-----------+-------------+----------+----
template作成
$ mkdir /ROOT/mysite/polls/template/polls $ cd /ROOT/mysite/polls/template/polls $ vi index.html ----- {% if latest_poll_list %} <ul> {% for poll in latest_poll_list %} <li>{{ poll.question }}</li> {% endfor %} </ul> {% else %} <p>No polls are available.</p> {% endif %} ----- $ cp index.html toritonn.html $ vi toritonn.html ----- TritoNNNNNNNNNNNNNNNNNN あとはindex.html -----
view作成
$ vi /ROOT/mysite/urls.py ----- from django.conf.urls.defaults import * urlpatterns = patterns('', (r'^polls/$', 'mysite.polls.views.index'), (r'^polls/toritonn/$', 'mysite.polls.views.toritonn'), ) ----- $ vi /ROOT/mysite/polls/views.py ----- #coding=UTF8 from django.shortcuts import render_to_response from mysite.polls.models import Poll def index(request): latest_poll_list = Poll.objects.all().order_by('-pub_date')[:5] return render_to_response('polls/index.html', {'latest_poll_list': latest_poll_list}) def tritonn(request): # ここでSennaのクエリー構文を使ってみる。 latest_poll_list = Poll.objects.extra(where=['match(question) against("*DOR 雨" in boolean mode)']) return render_to_response('polls/toritonn.html', {'latest_poll_list': latest_poll_list}) ---