On Wed, Aug 22, 2012 at 12:51 PM, David McKeone <davidmcke...@gmail.com> wrote:
> I've been using SQLAlchemy with Flask via the Flask extension
> Flask-SQLAlchemy. Everything works great so far, but I foresee a potential
> problem once I start to use my database model outside of Flask.  In the
> future I'd like to be able to use my models with non-Flask SQLAlchemy (a
> worker daemon process or with a PySide interface).  "Well just use standard
> SQLAlchemy," you may say, " and fore-go the use of the extension".  That was
> my first thought, but sadly some useful extensions (notably
> Flask-DebugToolbar) seem to like using the extension version and it is nice
> to be able to have Flask manage the database sessions in the way that it
> does.  I'd like to not throw the baby out with the bath water.
>
> I realize that this is somewhat specific to Flask, but is there a way that I
> could do both?  Can I create models with standard SQLAlchemy declarative and
> then somehow inject them into Flask-SQLAlchemy's way of doing things?
>
> If it helps with the solution, I don't need to use any of the Model specific
> methods that Flask-SQLAlchemy provides (get_or_404, paginate, etc..) and I
> also specify a __tablename__ for all of my models, so I don't rely on
> Flask-SQLAlchemy generating that for me.
>
> I took a look at the source of Flask-SQLAlchemy
> (https://github.com/mitsuhiko/flask-sqlalchemy/blob/master/flask_sqlalchemy.py)
> and from what I can tell it seems that it's using Flask's signalling
> capabilities by customizing SQLAlchemy's session and mapper, but that is
> where my understanding ends (I'm still new to this whole stack, Python,
> Flask, SQLAlchemy) and I could use some pointers for how to proceed.
>
>
> To visualize what I'm talking about, here are the two types of models.  A
> basic Flask-SQLAlchemy model looks like
> (http://packages.python.org/Flask-SQLAlchemy/quickstart.html#a-minimal-application):
>
> from flask import Flask
> from flask.ext.sqlalchemy import SQLAlchemy
>
> app = Flask(__name__)
> app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
>
> db = SQLAlchemy(app)
>
> class User(db.Model):
>     id = db.Column(db.Integer, primary_key=True)
>     username = db.Column(db.String(80), unique=True)
>     email = db.Column(db.String(120), unique=True)
>
>     def __init__(self, username, email):
>          self.username = username
>
>                    self.email = email
>
>
>     def __repr__(self):
>         return '<User %r>' % self.username
>
>
> Note the db.Model, db.Integer and db <dot> everything.
>
> The plain declarative SQLAlchemy equivalent would be
> (http://flask.pocoo.org/docs/patterns/sqlalchemy/):
>
>
> from sqlalchemy import Column Integer, String, create_engine
> from sqlalchemy.orm import scoped_session, sessionmaker
> from sqlalchemy.ext.declarative import declarative_base
>
> engine = create_engine('sqlite:////tmp/test.db', convert_unicode=True)
> db_session = scoped_session(sessionmaker(autocommit=False, autoflush=False,
> bind=engine))
> Base = declarative_base()
> Base.query = db_session.query_property()
>
>
> class User(Base):
>      __tablename__ = 'users'
>
>      id = Column(Integer, primary_key=True)
>      name = Column(String(50), unique=True)
>      email = Column(String(120), unique=True)
>
>      def __init__(self, name=None, email=None):
>          self.name = name
>          self.email = email
>
>      def __repr__(self):
>          return '<User %r>' % (self.name)
>

>From a very quick read of the Flask-SQLAlchemy docs, I would have
thought you could just use your flask-based classes in non-Flask-based
apps without any issue. The quickstart guide that you referenced above
illustrates a command-line session using them, so there's no reason
why you couldn't do the same in a worker process.

Have you already tried it and found that it doesn't work?

Simon

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