Niphlod,
Thank you very much for your detail answers. It seems that your new data
model is better, and is the way to go.
My old model may be fine for my small database using the "OR". I may try
both and compare.
Thanks!
On Monday, October 28, 2013 6:20:31 PM UTC-4, Niphlod wrote:
>
> ok. there's clearly a mismatch between what you expect from what you're
> writing.....
>
> db.table.field == 'something'
> db.table.field > something
> db.table.field.startswith('something')
> db.table.field.contains('something')
>
> are what in DAL are called Queries.
> They turn out to be the "WHERE" part in T-SQL.
> DAL (with an exception on the belongs() method) expects the 'something' to
> be fixed.
>
> Now, you want your relationship defined out of a relation that in T-SQL
> isn't really performant ( startswith turns into a LIKE statement that
> basically needs to scan the entire table).
> I'd advise you to simply add to the equipment table a reference to the
> models... queries are much faster that way (both writing them and execution
> times on the backend).
>
> "my data model"
> db.define_table("models", Field("name"), Field("expected_life", "integer"
> ))
> db.define_table("equipment", Field("model_id", "reference models"), Field(
> "name"))
> #fetch all equipments with 10 years of expected life
> db(db.models.expected_life == 10)(db.equipment.model_id == db.models.id).
> select(db.equipment.ALL)
>
> Assuming you want to pursue your model, and assuming that is roughly
>
> db.define_table("models", Field("name"), Field("expected_life", "integer"
> ))
> db.define_table("equipment", Field("name"))
>
>
> what you need instead is to basically fetch all models and do something
> like name.startswith(first_result) OR name.startswith(second_result) OR ....
>
> #fetch all models with 10 years of expected life
> models_10 = db(db.models.expected_life == 10).select() ##holds SVP7 and
> such
> queries = [db.equipment.name.startswith(row.name) for row in models_10]
> #now, let's put them in a OR ... OR fashion
> query = reduce(lambda a,b: (a|b), queries)
> #finally, fetch the equipments
> equipments_10 = db(query).select()
>
>
>
>
--
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
---
You received this message because you are subscribed to the Google Groups
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.