试图在注释和文档类之间创建关联关系。 我面临的问题是,仅当我使用关联表对象而不是该表名时,我的辅助关系才起作用。 我的意思是这种关系:

notes = relationship(u'Note', secondary=t_Documented, backref='documents')

有效,但以下内容无效:

notes = relationship(u'Note', secondary='Documented', backref='documents')

查询时,出现错误:

sqlalchemy.exc.InvalidRequestError:初始化映射程序Mapper | Document | Document时,表达式'Documented'找不到名称(“未定义名称'Documented'”)。 如果这是一个类名,请考虑在定义了两个从属类之后,将此Relation()添加到类中。

我宁愿使用名称,因为我的模型是使用sqlacodegen生成的。

此外,SQLAlchemy的文档说我可以将名称( http://docs.sqlalchemy.org/en/rel_0_9/orm/relationships.html#many-to-many )与带有“正在使用声明式扩展名”的警告一起使用。 我用Google搜索这个词,使我想到了这一点 问题是我该如何扩充基础。

# 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数据库。

===============>>#1 票数:5 已采纳

您的表的架构为“ MySchema”,因此必须包含在其中:

notes = relationship(u'Note', secondary='MySchema.Documented', backref='documents')

  ask by ksindi translate from so

未解决问题?本站智能推荐: