Oops - should have asked the Flask-SQLAlchemy folks! Thanks
On Tue, Oct 13, 2015 at 11:30 AM, Mike Bayer <mike...@zzzcomputing.com> wrote: > > > On 10/13/15 7:16 AM, Don O'Hara wrote: > > I'm looking for advice on best SA coding practices to accomplish: > > > > 1. Use bind keys > > I'm not familiar with that, I see you using something called > __bind_key__ and SQLALCHEMY_BINDS. These are not constructs that are > part of SQLAlchemy; if this is a third-party package of some kind, I'd > ask them for help. > > > > > > > 2. Add user-defined tags to tables, to allow iterating through the > > metadata later to find tables with those tags. > > 3. Use base table classes for common attributes and methods > > > > Is there a chance that class member names will get mangled in derived > > classes, > > and cause problems somewhere downstream? The code works now, but when I > > remove one of the > > base classes, and code the metadata directly in the table class things > > break. > > > > I'd like to get a better understanding of how it all fits, and make > > sure I'm setting things up correctly. > > > > Thanks, > > Don > > > > > > > > My code: > > > > | > > _inconfig.__py > > _ > > SQLALCHEMY_BINDS ={ > > 'api':'postgresql+psycopg2://oharad:dino@localhost:5432/dev_api_02', > > > > 'person_indexes':'postgresql+psycopg2://oharad:dino@localhost > :5432/dev_person_ix_01', > > > > 'analysis_result':'postgresql+psycopg2://oharad:dino@localhost > :5432/dev_analysis_res_01' > > } > > > > _in models/__init__.py_ > > > > ACCOUNT_SCHEMA_NAMESPACE = 'account' > > > > class BaseAppTable(db.Model): > > __abstract__ = True > > def to_json(self): > > json = {c.name: str(getattr(self, c.name)) or '' for c in > > self.__table__.columns} > > return json > > > > > > _in models/account.py_ > > > > > > from models import BaseAppTable, db, ACCOUNT_SCHEMA_NAMESPACE > > > > _BASE_TABLE_ARGS = {'info': {'table_namespace': > ACCOUNT_SCHEMA_NAMESPACE}} > > > > class BaseAccountTable(object): > > __bind_key__ = 'api' > > __table_args__ = _BASE_TABLE_ARGS > > > > class Account(BaseAppTable, BaseAccountTable): > > __tablename__ = "account" > > # > > # need to explicitly code __table_args__ here to use 'tuple, dict' > > syntax > > __table_args__ = (UniqueConstraint('name', 'company_id', > > name='account_uq_ix1'), > > _BASE_TABLE_ARGS) > > account_id = db.Column(db.Integer, primary_key=True) > > name = db.Column(db.String(length=50), nullable=False) > > company_id = db.Column(db.Integer, > > db.ForeignKey('global.company.company_id'), nullable=False) > > > > > > class RoleGroup(BaseAppTable, BaseAccountTable): > > __tablename__ = "role_group" > > role_group_id = db.Column(UUID, primary_key=True) > > type_code = db.Column(db.SmallInteger, nullable=False) > > name = db.Column(db.String(length=100), nullable=False, unique=True) > > > > | > > > > This code works fine, but I'm worried something might break due to name > > mangling. > > > > When I change the code to avoid base classes, I get an error: > > > > | > > classAccountCodeNamespace(BaseAppTable): > > __tablename__ ="account_code_namespace" > > __table_args__ =_BASE_TABLE_ARGS > > __bind_key__ ='api' > > > > | > > > > > > * # AssertionError: Bind 'api' is not specified. Set it in the > > SQLALCHEMY_BINDS configuration variable* > > > > > > > > -- > > You received this message because you are subscribed to the Google > > Groups "sqlalchemy" group. > > To unsubscribe from this group and stop receiving emails from it, send > > an email to sqlalchemy+unsubscr...@googlegroups.com > > <mailto:sqlalchemy+unsubscr...@googlegroups.com>. > > To post to this group, send email to sqlalchemy@googlegroups.com > > <mailto:sqlalchemy@googlegroups.com>. > > Visit this group at http://groups.google.com/group/sqlalchemy. > > For more options, visit https://groups.google.com/d/optout. > > -- > You received this message because you are subscribed to a topic in the > Google Groups "sqlalchemy" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/sqlalchemy/7kb-9pSu3Bk/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > sqlalchemy+unsubscr...@googlegroups.com. > To post to this group, send email to sqlalchemy@googlegroups.com. > Visit this group at http://groups.google.com/group/sqlalchemy. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at http://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.