[Zope-dev] Idea: Create SQL-Alchemy tables via interfaces
Hermann Himmelbauer
dusty at qwer.tk
Wed Sep 3 10:34:09 EDT 2008
Am Mittwoch 03 September 2008 15:14:22 schrieb Martijn Faassen:
> Hey Hermann,
>
> Hermann Himmelbauer wrote:
> > In my current SQLAlchemy / Zope-based design, I need the following:
> >
> > - SQLAlchemy table definitions
> > - classes + mappers
> > - Zope interfaces
> >
> > The problem with this design is that much data has to be defined twice,
> > e.g. the datatype "varchar(50)" should be represented by an interface
> > with TextLine(max_length="50"). Moreover, any changes such as adding
> > columns etc. also have to be done in the interface and the table
> > definition.
> >
> > To overcome this, I just had the idea to use the interface/schema
> > definitions for the table definition itself. Probably I'm not the first
> > who had this idea, but I'm not aware of such an extension to interfaces.
> >
> > Any thoughts on this?
>
> I'm quite interested in reducing duplication myself.
>
> I believe z3c.dobbin is an approach in this direction, though it may be
> more ambitious than you need; I believe it tries to make RDB-backed
> objects feel like the ZODB.
I see - I did not look at z3c.dobbin at this point, however, as you already
guessed, my ambition is not to make objects feel like the ZODB.
> In megrok.rdb we've sketched out the reverse of your approach: derive
> the Zope 3 schemas from the SQLAlchemy table definitions. This because
> it's more easy to derive a basic schema from a table definition without
> supplementary information than the other way.
Yes, I also thought about this, but I'm not quite sure about this approach for
the following reasons:
- More schema types than SQL data types, for instance Text, TextLine, Email,
etc. would all match a varchar.
- Constraints like min_length and values (in Choice) are not covered in the
database
- In my mappers, I often have custom properties (e.g. for converting database
values), which probably can not automatically be included in the schema.
- In the design process, I think the first step is to define the interface.
And the next step is the mapping of the interface (if it's a content object)
to the underlying storage. For that reason, the interface->SA-Table approach
seems more appealing to me.
I know, the interface->dbtable way does also have it's shortcomings and other
things will not be covered by them (e.g. BLOB and varchar can both be
represented by a Text etc.), but I assume that it would be easier to overcome
them.
> (I fear though that as soon as a form needs to be made that *really*
> works properly, supplementation of the conversion process with more
> detailed schema information is still necessary. We have been thinking
> about good ways to express this)
Yes, for the SA-Tables -> schema approach, certainly.
> I believe that ore.alchemist or somesuch also implements this approach.
> This has been factored out by Laurence Rowe in something called
> collective.mercury. This code is more mature than megrok.rdb's
> conversion code, though in my opinion also a bit more complicated than
> it might be.
That's interesting and I'll have a look at it, although I'm not really
convinced about the SA-Tables -> schema approach.
Thanks for your comments!
Best Regards,
Hermann
--
hermann at qwer.tk
GPG key ID: 299893C7 (on keyservers)
FP: 0124 2584 8809 EF2A DBF9 4902 64B4 D16B 2998 93C7
More information about the Zope-Dev
mailing list