Python&指定模式名称

时间:2017-03-01 16:14:24

标签: python flask-sqlalchemy

这里是代码:

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()

AvailableModules = db.Table('available_modules',
    db.Column('customer_id', db.Integer, db.ForeignKey('customers.id')),
    db.Column('module_id', db.Integer, db.ForeignKey('modules.id')),
    schema='tcloud_admin')

class Customer(db.Model):
    __tablename__ = 'customers'
    __table_args__ = {"schema":"tcloud_admin"}
    id = db.Column(db.Integer, primary_key=True)
    ....
    modules = db.relationship('Module', secondary=AvailableModules)

class Module(db.Model):
    __tablename__ = 'modules'
    __table_args__ = {"schema":"tcloud_admin"}
    id = db.Column(db.Integer, primary_key=True)
    ....

尝试上面的脚本会给我这个错误:

  

sqlalchemy.exc.NoReferencedTableError:与之关联的外键   列' available_modules.customer_id'找不到桌子   '客户'用于生成目标列' id'

的外键

如果没有指定架构名称,一切正常。

1 个答案:

答案 0 :(得分:1)

使用自定义架构名称时,引用该架构中的表或列的所有外键也必须显式包含该架构名称。

您的ForeignKey('customers.id')引用了不在自定义架构中的其他表customers。由于此表根本不存在,因此会出现相应的错误。

要修复错误,请更改外键:

db.ForeignKey('tcloud_admin.customers.id')
db.ForeignKey('tcloud_admin.modules.id')

docs

中也对此进行了解释