Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 25, 2007 22:34:28

SmartKiwi
От:
Зарегистрирован: 2006-12-19
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск для TurboGears/SQLObject

Приветствую еще раз

Подскажите есть ли готовое решение для того чтобы сделать поиск по полям таблицы(нескольких таблиц) /реализованное с помощью SQLObject/SQLAlchemy

Есть ли решения для поиска для TG?

Владимир



Отредактировано (Янв. 25, 2007 22:42:50)

Офлайн

#2 Янв. 26, 2007 04:46:38

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Поиск для TurboGears/SQLObject

Не совсем понял вопроса, поясни задачу. Интересует полнотекстовый поиск?



Офлайн

#3 Янв. 26, 2007 06:17:37

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск для TurboGears/SQLObject

SmartKiwi, вопрос понять сложно :(
может вот это:
Selecting Multiple Objects
Subqueries (subselects)
Select-By Method

или тебе нужно завязать AutoCompleteField и SQLObject ?

PS пожалуйста, опиши вопрос конкретнее - можно своими словами :)



Офлайн

#4 Янв. 26, 2007 14:42:15

SmartKiwi
От:
Зарегистрирован: 2006-12-19
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск для TurboGears/SQLObject

Рассказываю подробней о моей задаче:

Есть таблица со свойствами товаров, каждое свойство храниться в соотв поле.
Нужен поиск подстроки по всем полям таблицы.
Таблица живет в MySQL базе

Возможные реализации о которых я подумал:
1) в лоб - записать один запрос типа col1 like ‘%text%’ or col2 like ‘%text%’ or …
минусы - не используется индекс, нужно руками прописывать все поля. Сейчас в таблице около 500 записей, в рабочей версии будет около 3000.
2) собирать текст из всех колонок в отдельную колонку (или даже отдельную таблицы) и сделать для нее full text index и использовать его
минусы - привязка к одной ДБ, точнее переписывать реализацию полнотекстового индекса
3) что-то еще

+ хочется языка запросов (хотя бы с поддержкой логики AND OR)
Подобных поисковых решений для RoR я встречал несколько вариантов в состоянии воткнул и работает… Интересуюсь - есть ли что-то подобное для python? …



Офлайн

#5 Янв. 27, 2007 10:02:40

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Поиск для TurboGears/SQLObject

Поскольку MySQL, то можно использовать полнотекстовый поиск средствами этой СУБД.

http://www.mercurytide.com/knowledge/white-papers/django-full-text-search



Офлайн

#6 Янв. 30, 2007 06:15:28

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск для TurboGears/SQLObject

SmartKiwi
+ хочется языка запросов (хотя бы с поддержкой логики AND OR)
документация == http://sqlobject.org/SQLObject.html
примеры
http://sqlobject.org/SQLObject.html#selecting-multiple-objects
http://sqlobject.org/SQLObject.html#subqueries-subselects
http://sqlobject.org/SQLBuilder.html

есть и AND и OR и субселесты

http://www.google.com/search?hl=ru&q=site%3Asqlobject.org+%22.select%28%22&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=

from sqlobject.sqlbuilder import EXISTS, Select
select = Test1.select(EXISTS(Select(Test2.q.col2, where=(Outer(Test1).q.col1 == Test2.q.col2))))

MyTable.select((MyTable.q.name + MyTable.q.surname) == u'value')

MyTable.select(u'value' == MyTable.q.name)
MyTable.select(MyTable.q.name <> u'value')
MyTable.select(OR(MyTable.q.col1 == u'value1', MyTable.q.col2 <> u'value2'))
MyTable.selectBy(name = u'value')
MyTable.selectBy(col1=u'value1', col2=u'value2')
MyTable.byCol1(u'value1') # if col1 is an alternateID

peeps = Person.select(Person.q.firstName=="John")

>>> peeps = Person.select(
... AND(Address.q.personID == Person.q.id,
... Address.q.zip.startswith('504')))
>>> list(peeps)
1/Select : SELECT person.id, person.first_name, person.middle_initial, person.last_name FROM person, address WHERE ((address.person_id = person.id) AND (address.zip LIKE '504%'))
1/COMMIT : auto
[]
>>> peeps = Person.select("""address.id = person.id AND
... address.zip LIKE '504%'""",
... clauseTables=['address'])
peeps = Person.selectBy(firstName="John", lastName="Doe")

Exported Symbols

You can use from sqlobject import *, though you don't have to. It exports a minimal number of symbols. The symbols exported:

From sqlobject.main:

* NoDefault
* SQLObject
* getID
* getObject

From sqlobject.col: * Col * StringCol * IntCol * FloatCol * KeyCol * ForeignKey * EnumCol * DateTimeCol * DateCol * TimeCol * DecimalCol * CurrencyCol

From sqlobject.joins: * MultipleJoin * RelatedJoin

From sqlobject.styles: * Style * MixedCaseUnderscoreStyle * DefaultStyle * MixedCaseStyle

From sqlobject.sqlbuilder:

* AND
* OR
* NOT
* IN
* LIKE
* DESC
* CONTAINSSTRING
* const
* func
from sqlobject.sqlbuilder import LEFTJOINOn
MyTable.select(
    join=LEFTJOINOn(Table1, Table2,
                    Table1.q.name == Table2.q.value))

http://sqlobject.org/SQLObject.html#left-join-and-other-joins



Офлайн

#7 Янв. 31, 2007 10:23:01

OlDer
От:
Зарегистрирован: 2006-07-19
Сообщения: 133
Репутация: +  0  -
Профиль   Отправить e-mail  

Поиск для TurboGears/SQLObject

SmartKiwi
Есть таблица со свойствами товаров, каждое свойство храниться в соотв поле.
Нужен поиск подстроки по всем полям таблицы.
http://cheeseshop.python.org/pypi/TurboLucene/ не подойдет?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version