Jur*_* V. 9 python sqlalchemy flask flask-sqlalchemy
我有两个共享相同名称但位于不同数据库中的表:
class Lcn(db.Model):
__tablename__ = 'lcn'
class LcnRemote(db.Model):
__bind_key__ = 'remote'
__tablename__ = 'lcn'
Run Code Online (Sandbox Code Playgroud)
似乎SQLAlchemy不喜欢这样.它说:
sqlalchemy.exc.InvalidRequestError:已为此MetaData实例定义表'lcn'.指定'extend_existing = True'以重新定义现有Table对象上的选项和列.
有没有办法解决这个问题,而无需重命名我的一个表?
Mar*_*ers 11
对具有相同名称的不同数据库使用单独的声明性基类,以防止共享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'
Run Code Online (Sandbox Code Playgroud)
这是Flask-SQLAlchemy的限制,它确实应该允许你为每个绑定创建声明性基础.的方式SQLAlchemy()类目前被设计限制它只是一个这样的基体; 它通过db.Model它在开始时生成的类代理各种SQLAlchemy元数据调用.通过创建两个实例flask_sqlalchemy.SQLAlchemy()解决此问题.
| 归档时间: |
|
| 查看次数: |
3809 次 |
| 最近记录: |