python - SqlAlchemy 没有定义这样的多态身份

标签 python orm sqlalchemy

我正在尝试存储第3方站点的用户oauth详细信息,BaseConnection表用于存储连接的基本信息

class BaseConnection(Base):
    __tablename__ = "BaseConnection"
    id = Column(Integer, primary_key=True)
    username = Column(Unicode(255),
                      ForeignKey('users.username'))
    type = Column(Unicode(255))
    is_active = Column(Boolean, default=False)
    last_connection = Column(DateTime, onupdate=datetime.utcnow)

    __mapper_args__ = {
        'polymorphic_identity': 'BaseConnection',
        'polymorphic_on': type
    }

    def __init__(self, username, type, is_active):
        self.username = username
        self.type = type
        self.is_active = is_active

Twitter 连接用于存储 Twitter 帐户的 ouath 详细信息

class TwitterConnection(Base):
    __tablename__ = "TwitterConnection"

    connection_id = Column(Integer, ForeignKey('BaseConnection.id'),
                           primary_key=True)
    uid = Column(Unicode(255))
    access_key = Column(Unicode(255))
    access_secret = Column(Unicode(255))
    twitter_username = Column(Unicode(255))
    refresh_date = Column(DateTime)

    __mapper_args__ = {
        'polymorphic_identity': 'TwitterConnection'
    }

    def __init__(self, connection_id, 
                 uid, access_key, access_secret, twitter_username):
        self.connection_id = connection_id
        self.uid = uid
        self.access_key = access_key
        self.access_secret = access_secret
        self.twitter_username = twitter_username
        self.refresh_date = datetime.now()

然后我使用代码将第一个详细信息添加到表格

base_connection = BaseConnection('admin', TwitterConnection.__name__, True)
base_connection.last_connection = datetime.now()
DBSession.add(base_connection)
DBSession.flush()
tconnection = TwitterConnection(
                 base_connection.id,
                 uid=u'1234',
                 access_key=u'dummy',
                 access_secret=u'dummy',
                 twitter_username='dummy')
DBSession.add(tconnection)
DBSession.flush()
transaction.commit()

我正在尝试编写一个查询来查找具有特定用户名的用户的所有第三方帐户

qry = BaseConnection.query.filter(
                BaseConnection.username==username)
qry.all()

上面的查询给出了错误

`AssertionError: No such polymorphic_identity u'TwitterConnection' is defined

我是 sqlalchemy 的新手,感谢帮助,谢谢。

最佳答案

抱歉,

class TwitterConnection(Base):

应该是

class TwitterConnection(BaseConnection):

关于python - SqlAlchemy 没有定义这样的多态身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24107239/

相关文章:

python - 如何在全局范围内向 Python Logger 对象添加处理程序?

python - 我应该如何在 Pandas 中将索引与标题名称合并?

java - Hibernate 不会加载一对多的关系集,即使使用 eager fetch

php - 在fuelphp中查询数据库的更好方法是什么?

python - SQLAlchemy - 查询显示两个表中都存在记录的结果

python - Django 在修改 less 文件时运行 bash 脚本

java - 将 Hibernate 3.0 与 EJB 3.0 和 JPA 结合使用

python - 如何使用 SqlAlchemy ORM 以一对多关系连接 2 个表并从其他表获取最新记录

python - 如何在 SQLite 中使用 ROW_NUMBER()?

python - OpenCV Blob 检测器未检测到白色 Blob