尝试在类Note和Document之间创建关联关系。我面临的问题是,只有当我使用关联表对象而不是表名时,我的辅助关系才有效。我的意思是关系:
notes = relationship(u'Note', secondary=t_Documented, backref='documents')
有效,但以下情况不起作用:
notes = relationship(u'Note', secondary='Documented', backref='documents')
查询时,我收到错误:
sqlalchemy.exc.InvalidRequestError:初始化mapper时 映射器|文档|文档,表达式'已记录'无法找到 name(“name'Documented'未定义”)。如果这是一个类名, 考虑将此关系()添加到 在定义了两个依赖类之后的类。
我宁愿使用该名称,因为我的模型是使用sqlacodegen生成的。
此外,SQLAlchemy文档说我可以使用名称(http://docs.sqlalchemy.org/en/rel_0_9/orm/relationships.html#many-to-many)与caveta“使用声明性扩展”。我用Google搜索了导致我this的词。问题是在我的情况下我可以如何扩充基地。
# model.py
# coding: utf-8
from sqlalchemy import Column, Date, DateTime, ForeignKey, ForeignKeyConstraint, Index, Integer, Numeric, String, Table, Text, text
from sqlalchemy.orm import backref, relationship
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
metadata = Base.metadata
t_Documented = Table(
'Documented', metadata,
Column('id', Integer, primary_key=True),
Column('note_id', ForeignKey(u'MySchema.Note.id'), nullable=False),
Column('document_id', ForeignKey(u'MySchema.Document.id'), nullable=False, index=True),
Column('inserted', DateTime, nullable=False, server_default=text("'0000-00-00 00:00:00'")),
Column('updated', DateTime, nullable=False, server_default=text("'0000-00-00 00:00:00'")),
Index('Documented_AK1', 'note_id', 'document_id'),
schema='MySchema'
)
class Note(Base):
__tablename__ = 'Note'
__table_args__ = {u'schema': 'MySchema'}
id = Column(Integer, primary_key=True)
class Document(Note):
__tablename__ = 'Document'
__table_args__ = {u'schema': 'MySchema'}
id = Column(ForeignKey(u'MySchema.Note.id'), primary_key=True)
title = Column(String(100), nullable=False)
author = Column(String(100), nullable=False)
notes = relationship(u'Note', secondary='Documented', backref='documents')
使用SQLAlchemy 0.9.4和Python 2.6.6。连接器是MySQLDB,我正在使用MySQL数据库。
答案 0 :(得分:5)
你的桌子有一个“MySchema”的模式,所以它必须是它的一部分:
notes = relationship(u'Note', secondary='MySchema.Documented', backref='documents')