Hi Huy,

Thanks for your comments!

On 22 Apr 2009, at 05:33, huy wrote:

> I guess it depends if you are going the standard SA table/mapping way
> or the sqlalchemy.ext.declarative way

So this is a good question to ask. As I'm just starting out with SA, I  
have no legacy code to update, and thus have started with the 0.5.x  
version where the documentation recommends using the declarative way.  
I don't know how this differs from the old way (besides which base  
class to use). What is the difference, and should I be using that?

>> - I want to use reflection whenever possible.
> Not sure exactly which reflection you want here but my experience with
> a database of about 30+ tables, it's so much faster for development
> to have a static SA table definitions file then to have it reflect on
> every server reload.

Of course - I want to generate static definitions in a single file,  
and then import that file from my python scripts. What I'm trying to  
avoid is when I make modifications to my db schema that I don't have  
to tune the class/table definitions by hand in this file.

>> - I want to create a second python script that will contain one class
>> definition for each in the first file. For example, let's say I  
>> have a
>> table called "plate". The first file will contain the full definition
>> for a class called "Plate_". The second file might contain:
>>
>> class Plate(Plate_): pass
>>
>> The second definition is a subclass of the first where I can put
>> custom logic (if I need any) for each class. This is the class I will
>> use in my scripts. I will then import this file from the many scripts
>> I need to write that use this database.
>>
> Just wondering why you need both ? (unless you are going the
> sqlalchemy.ext.declarative way.)

Let's say here the "Plate" class represents the table "plate" in the  
database. I want to write some custom logic into the Plate class, for  
example a method "is_finished". This is not a field in the table, but  
a calculation that could depend on both data from the db and external  
information passed to it at runtime. The problem comes when I want to  
regenerate the static db definitions - my custom (non-database)  
definitions would be overwritten. By keeping them separate, I can  
regenerate the static definitions any time.

I'm not sure of the meaning of your second remark about using the  
declarative method? How does this change things in what I'm trying to  
do?

> If you are using the standard table/mapping, your model classes don't
> have to extend explicitly an SA base class.
> Also, SA can work with a simple class definition like
>
> class Plate(object):
>    pass
>
> and it auto injects everything itself, when you do the mapping. It's
> not like java where you generate
> setters and getters for every database column.

That's definitely nice. The WebObjects code that was generated did  
create all of the setters and getters (which I see I don't need), but  
also defined all the relationships between the objects. I think this  
was the part that the latest autocode was missing. Then my subclass of  
that object would contain my custom logic.

I'm a little unclear about that object definition above - how does  
this declaration talk to SA?

> I think it's good to do some things manually when you first start out.
> Heck, it's not really that much code.  I guess you come from WO which
> generated pretty much everything.

Is that a bad thing? :) If a program can do it, I don't want to!

My mindset is that I'd really prefer to be able to get up and running  
very quickly to be able to do the most common stuff, and only have to  
dig into the specifics when I need to optimise or do something  
unusual. I've been doing DBI programming in Perl for a long time, but  
this just thinly wrapped SQL. SA is really promising to remove the  
tedious SQL coding, but I think it can be made a bit easier (much like  
Elixir has done).

Thanks again for taking to the time respond to my questions (and if  
you've got this far, reading through all this!). I appreciate the  
help. I will take a closer look at autocode to see if it can't do what  
I need with minimal patching.

Cheers,

Demitri


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to