Another past effort: https://code.google.com/p/web2pyorm/

On Sunday, April 28, 2013 8:59:40 PM UTC-4, Anthony wrote:
>
> I think you're arguing against a bit of a straw man here. Past resistance 
> to the idea of an ORM has usually been in the context of suggestions for an 
> ORM *instead of* a DAL, not as an additional abstraction on top of the 
> DAL for particular use cases. As Massimo noted, there have already been 
> some efforts at the latter, though none generated enough interest to 
> persist. If you can identify a common use case where some kind of 
> abstraction on top of the DAL would make development much easier and/or 
> execution more efficient, and you can clearly articulate the nature of that 
> abstraction, I don't think anyone would object. It might help to see 
> something concrete, though. Let's see an example data model, how it would 
> be easily implemented in SQA or the hypothetical web2py ORM, and how that 
> is a clear improvement over how you would otherwise have to implement it 
> using the DAL. I also wonder if it is a full-blown ORM that is needed, or 
> just some additional DAL functionality to more easily accommodate 
> particular types of data models.
>
> Anthony
>
> On Sunday, April 28, 2013 2:41:46 PM UTC-4, Arnon Marcus wrote:
>>
>>
>> And where did you see a lack in functionality using DAL callbacks ?
>>>  
>>>
>>
>> I am not that familiar with them, honestly.
>> As I said - It may seem as though I am saying that web2py currently 
>> can-not accomplish this - what this actually means, is that "I don't know 
>> of ways in which web2py can accomplish this"
>> I would be more than happy to find out that I am wrong! :)
>>
>> How can DAL-callbacks be used to emulate this?
>> Can they auto-infer relationships bi-directionally from the schema, and 
>> supply event-listeners for each end of each multi-targetted relationship?
>> How would I factor such a mechanism into my own classes to link them up?
>>
>> Just because the scaffolding app doesn't have any module in it? I use 
>>> modules all the times if I don't want to reload the code at every request, 
>>> that's why they are available.
>>>
>>
>> I said that most of our code is in custom-modules, so obviously I know 
>> that web2py "supports" this.
>>
>> What I meant by that, is that it seems as though due to the fact that 
>> web2py "executes" the models, and so has implicit-session-management going 
>> on on the DAL, it "assumes" a "data-model-session" by default. So, the 
>> characteristics and features of the DAL are (obviously) targeted 
>> at supporting this mechanism. All other frameworks do not execute the 
>> models on each request. You may write a reload(), but that's your business  
>> So, SQLA is designed to support this execution model, which is why it has 
>> to provide all these wild connection-sessions, transactions, and 
>> table-cache-invalidation mechanisms with expirations, dirty-checkings and 
>> the like...
>>
>> Web2py took advantage of it's execution to basically allow itself to 
>> completely avoid any of these stuff.
>> So, if you want to implement a data-model using the DAL "within a 
>> non-executed/non-reloaded custom-module", than you are basically on your 
>> own for implementing all these crazy db-sessions and the like.
>>
>> This is why it seems so odd for web2py users to grasp this notion of an 
>> ORM, as it is basically assuming a totally-different execution model for 
>> the db-models, compared to how it is currently built in web2py.
>>
>> It is like the different between a statefull system, and a stateless one.
>> SQLA is built for statefull applications.
>> Web2py's DAL is built for stateless ones.
>> It's a very different paradigm, with a different way of thinking.
>> And because of that, it is so wired to try to think about an ORM in 
>> web2py, especially if it is going to sit in a "statefull module". 
>>
>> Perhaps I am missing something here, but this is how I 
>> currently understand things.
>>
>>
>> That's just avoiding recursive queries. Again, SQLA doesn't figure out it 
>>> for you, you have to instruct it to be "eager" upfront. At that point, you 
>>> can instruct DAL to be eager too with joins.
>>>
>>
>> Obviously, but that's not the point - we are talking about "tools for 
>> automating abstractions". He did not write the join himself there...
>> The eager-loading system figured out by itself which joins it should 
>> construct in order to eager-load things - all he did is tell the system to 
>> do so for that relationship.
>>
>>  
>>> Yep, really. Whenever I use db(query).select(), .update(), .delete() I 
>>> know that a query is fired (sort of "explicit is better than implicit"). If 
>>> I use SQLA I have to remember how the particular model was coded (and 
>>> optionally do some debugging) to see what's going on under the hood. Please 
>>> note that this is expected: you want an ORM to have another layer of 
>>> abstraction on top of database operation, so by default is more implicit.
>>>
>>
>> No. It's as if you completely missed his point. SQLA's ORM philosophy is 
>> different than others. Did you watch the lecture I gave you about that?
>> SQLA is not building your models - you are.
>> SQLA is not "hiding", it is "automating".
>> SQLA is not "obtuse", it is "transparent".
>> SQLA does not lock you into it's defaults - you define it's defaults 
>> up-front.
>>
>>>
>>> Same thing as before. You have to tell it upfront, and it's not 
>>> different from planning what to do with one/two/n DAL queries.
>>>
>>
>> No. It's automatic. You set-up the "relationship" object yourself - yes - 
>> but IT figures out whether this is a one-to-many relationship, and to which 
>> direction, and constructs an optimized query based on which end of the 
>> relationship you are querying. As he said, this is non-trivial in ORMs - 
>> Django's ORM (as he alluded...) is NOT doing that...
>>
>

-- 

--- 
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.


Reply via email to