flask sqlalchemy bind导致无法解释主键错误

时间:2015-10-22 16:59:15

标签: python flask sqlalchemy flask-sqlalchemy

问题我有一个烧瓶应用程序,其中我的sqlalchemy reflect()对SQLALCHEMY_BINDS指定的绑定的工作方式与对SQLALCHEMY_DATABASE_URI的工作方式不同。

结果 SQLALCHEMY_BINDS不会自动映射我的架构。

我有两个数据库,如我的config.py

所示
SQLALCHEMY_DATABASE_URI = 'postgresql://chet@localhost/ubuntuweb'
SQLALCHEMY_BINDS = {
    'test':        'postgresql://chet@localhost/warehouse',
 }

哪个db我输入URI db是精简的,并且使用reflect()工作没有任何问题

from app import db
from sqlalchemy.orm import relationship, backref

db.Model.metadata.reflect(db.engine)

class rutable(db.Model):
    __table__ = db.Model.metadata.tables['rutable']

当我在models.py

中添加此代码时
class test1(db.Model):
    __bind_key__ = 'test'
    __table__ =  db.Model.metadata.tables['test1']

results in this error

    __table__ =  db.Model.metadata.tables['test1']
   KeyError: 'test1'

然而这是有效的

class test1(db.Model):
    __bind_key__ = 'test'
    __tablename__ = 'test1'
    id = db.Column(db.Integer, primary_key=True)
    test = db.Column(db.String(80), unique=True)

效果很好。这是架构的完整映射。我想利用不需要手动写出变量。当我把它减少到

class test1(db.Model):
    __bind_key__ = 'test'

堆栈跟踪

sqlalchemy.exc.InvalidRequestError: Class <class 'app.models.test1'> 
does not have a __table__ or __tablename__ specified and does not 
inherit from an existing table-mapped class.

当我添加表名

class test1(db.Model):
    __bind_key__ = 'test'
    __tablename__ = 'test1'

sqlalchemy.exc.ArgumentError: Mapper Mapper|test1|test 
could not assemble any primary key columns for mapped table 'test1'

知道为什么会这样吗? 当我调查我的表中的id列时,它看起来像psql中的主键

谢谢!

0 个答案:

没有答案