在Flas中使用具有不同绑定的同名表

2024-10-02 20:40:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个共享相同名称但位于不同数据库中的表:

class Lcn(db.Model):
    __tablename__ = 'lcn'

class LcnRemote(db.Model):
    __bind_key__ = 'remote'
    __tablename__ = 'lcn'

看来SQLAlchemy不喜欢那样。上面写着:

sqlalchemy.exc.InvalidRequestError: Table 'lcn' is already defined for this MetaData instance. Specify 'extend_existing=True' to redefine options and columns on an existing Table object.

有没有一种方法可以在不需要重命名我的表的情况下解决这个问题?在


Tags: key名称数据库dbmodelremotesqlalchemybind
1条回答
网友
1楼 · 发布于 2024-10-02 20:40:33

对同名的不同数据库使用单独的declarative base classes,以防止共享SQLAlchemy元数据。您必须创建两个flask_sqlalchemy.SQLAlchemy()实例:

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/database1.db'
app.config['SQLALCHEMY_BINDS'] = {'remote': 'sqlite:////tmp/database1.db'}

db1 = SQLAlchemy(app)

class Lcn(db1.Model):
    __tablename__ = 'lcn'

db2 = SQLAlchemy(app)

class LcnRemote(db2.Model):
    __bind_key__ = 'remote'
    __tablename__ = 'lcn'

这是Flask SQLAlchemy的一个限制,它应该允许您为每个绑定创建声明性的基。当前SQLAlchemy()类的设计方式将其限制为一个这样的基;它通过它在一开始生成的db.Model类代理各种SQLAlchemy元数据调用。通过创建flask_sqlalchemy.SQLAlchemy()的两个实例,可以解决这个问题。在

相关问题 更多 >