Jonathan Ellis wrote:
    I've been trying to keep these things extracted from SQLObject2 in the
    form of SQL-API ( http://svn.sqlobject.org/sqlapi/trunk).  I would
    certainly be interested in reuse on that level, and I'm very open to
    suggestions and changes, or whatever.  It's intended to be a more
    useful
    layer on top of the DB-API.

    I did look at SQLAlchemy before writing sqlapi.sql (which is like
    sqlobject.sqlbuilder or sqlalchemy.sql).  There were some small details
    which bothered me in SQLAlchemy, particularly the binding from SQL to a
    specific database engine.  sqlapi.sql follows sqlbuilder in this
    respect, where an expression is abstract from any backend until it is
    actually executed.


I obviously don't speak for Michael, but I don't think that's something he considers essential to SqlAlchemy's nature, as long as the different backends eventually turn it into appropriate idiomatic SQL. And as long as the code doesn't get more complicated for a somewhat theoretical benefit... :)

Yes, he said that it wasn't that important in a comment on my blog as well. It is important for me -- I create SQL expressions at module import time, when there is no configured database. And I want the ability to switch databases dynamically even after import. So if a SQL expression was bound to a connection then I wouldn't be able to keep any SQL expressions, only calculating them on the fly.

I'd rather the binding not be optional either, as that creates a set of methods (e.g., execute) that are only valid to some users in some situations. It seems like a container that embodies both commands/SQL and connection would be better.

    Some other parts of SQL-API are I think thoroughly outside of the core
    scope of both SQLObject and SQLAlchemy; things like creating, pooling,
    and potentially configuring connections.  These things in SQL-API can be
    used in part or in whole.


SqlAlchemy does provide a connection manager/pooling mechanism that can be used independently of the higher-level ORM stuff.
    Lastly, it would be great if there could be some collaboration on a
    combined administration/migration tool, similar in scope to
    sqlobject-admin.  ORM-specific administration isn't really very useful
    -- especially when you can't be sure the ORM describes anything similar
    to what some legacy database looks like (before the upgrade).  And the
    kinds of functions you want to upgrade a database (ALTERs and table
    introspection, etc) are relatively uncommon in everyday database use, so
    including them in an ORM is unnecessary scope creep.  I think a
    cross-ORM tool (and just as applicable to no ORM) would be an easy
    place
    for collaboration.


If there were a shared substrate at the "sqlbuilder" level, such a tool's compatibility would be the next step up. And that would be a Good Thing.

I'm not set on any particular implementation detail of SQL-API. If everything that is in there currently is thrown away and replaced with stuff extracted from SQLAlchemy, that doesn't bother me at all. I have stronger opinions on the scope. I don't think it should include anything frameworkish -- meaning, no inversion of control, nothing that requires subclassing to be useful, and few logical abstractions. Well, I'm currently breaking that for the database backend plugins, which form a kind of framework with an abstract base class, but I'm less concerned from that perspective -- there should only be a handful of such plugins anyway, small compared to the number of people consuming the client end. If anything, I'd like to decrease the scope from what's there now.

As an example of what I think SQL-API can accomplish, I was working with Django the other day, and it has both its own configuration for databases (a set of variables, some of which aren't applicable to all backends), and I couldn't find a way to watch the queries (no logging that I could find), and the pooling for SQLite was broken (the same problems that there have been with SQLObject too). Stupid details, none of which have anything to do with Django's added value over DB-API, and none of which have any reason to be solved in a Django-specific way. SQLObject has the same stuff, and now SQLAlchemy, and no doubt other systems as well.

I tried out bzr last night on a lark, thought about putting SQL-API in that... but it didn't feel right to me, and doesn't seem important for this project in particular anyway. But anyway, commit access to the svn repository is available for anyone interested in working on this.

--
Ian Bicking  /  [EMAIL PROTECTED]  /  http://blog.ianbicking.org


-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
Sqlalchemy-users mailing list
Sqlalchemy-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users

Reply via email to