如何在不设置__tablename__的情况下继承SQLAlchemy中的声明?

wai*_*kuo 2 python sqlalchemy flask-sqlalchemy

使用flask-sqlalchemy,我想创建一些类来继承声明性类并添加__bind_key__.这样我就可以创建一些表并继承这些绑定类.

from flask.ext.sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class Model1(db.Model):
    __bind_key__ = 'db2'

class Table1(Model1):
    __tablename__ = 'table1'
    name = db.Column(db.String(100))
Run Code Online (Sandbox Code Playgroud)

但是我遇到了一些麻烦:

sqlalchemy.exc.InvalidRequestError: Class <class '__main__.Model1'> 
    does not have a     __table__ or __tablename__ specified 
    and does not inherit from an existing table-mapped class.
Run Code Online (Sandbox Code Playgroud)

我该怎么解决?

mtt*_*tth 5

你也可以使用这个__abstract__标志:

from flask.ext.sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class Model1(db.Model):
    __abstract__ = True
    __bind_key__ = 'db2'

class Table1(Model1):
    __tablename__ = 'table1'
    name = db.Column(db.String(100))
Run Code Online (Sandbox Code Playgroud)

SQLAlchemy声明性(此处为docs)忽略__abstract__设置为的类.作为奖励,这使您可以将SQLAlchemy特定属性(例如列)添加到您的.TrueModel1